||
客户端发出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进程将数据写回到存储中去。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-27 17:26
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社