lucheng918的个人博客分享 http://blog.sciencenet.cn/u/lucheng918

博文

SQL执行过程解析

已有 2946 次阅读 2014-3-5 17:26 |个人分类:SGA|系统分类:科研笔记

客户端发出SQL查询

SQL语句通过网络到达oracle实例

server process 接收sql语句

1.server process去共享池查看是否有缓存,如果有有的话就执行已经缓存的执行计划,如此执行节省时间。同样查数据时也会去buffer cache中找数据,如果找到就直接返回给用户。你看多节省时间呀?(此为 找)

2.如果没找到缓存记录呢?就进行解析sql:这样会消耗很多资源:cpu、IO。

3.将sql语句及sql语句的执行计划:缓存到共享池。同时从dbf中取出数据返回给用户,buffer cache用来缓存这些数据。


逻辑读,从buffer cache中读取数据

物理读,也叫磁盘读,直接从硬盘读数据


命中率=逻辑读/(逻辑读+物理读)

命中率越高,则效率更高一些。但是命中率高不一定意味着数据库没有问题,因为可能逻辑读太大。

linux命令 $vmstat 1 10

$iostat 1 10


shared pool:用来缓存sql语句及执行计划

buffer cache:用来缓存dbf数据。

从缓存中获取这些数据都由server process完成。如果没在buffer cache中没有找到数据,则从数据库中获取数据,先将这些数据放到buffer cache中去,然后在返回给用户。

疑问:如果这时候缓存内存的数据在数据库中改变了,如此如何处理?

答:

如果修改表,此时server process在内存中对表进行修改,先将数据读取到内存中,修改完成之后再返回给用户。

log writer (LGWR)负责将redo log日志写入redo log buffer中去。

DBW(DB writer)进程负责将修改后的数据写回到磁盘。

所以,从始至终都是server process与用户打交道。所以server process是调优中非常重要的一个点。它关系到用户体验。

CKPT:check point进程。检查点进程。周期性运行。更新控制文件和数据文件的头部。

SMON:系统监视器。对数据库实例进行维护。主内,在系统崩溃时恢复任务。主管SGA。

PMON:进程监视器。对server process监视。如果不需要,则释放PGA。

ARC进程:oracle有三组日志文件。一个写满之后,会启动ARC进程(归档进程)写入到归档日志,然后再写下一个日志。

服务器进程:

脏数据:在内存中被修改还没在存储中被修改的数据。

内存中的数据正在被修改时的状态称为pin状态。

干净数据:刚从存储中读入到内存中的。

避免读脏数据,如果全是脏数据,则触发DBW进程将数据写回到存储中去。








https://wap.sciencenet.cn/blog-780964-773323.html

上一篇:oracle体系结构
下一篇:shared pool 对sql语句的硬解析 软解析
收藏 IP: 168.160.22.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-21 19:14

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部