10.SQL语句执行过程
select * from dba_data_files;
1.客户端输入SQL语句
SQL语句通过网络到达数据库实例
ServerProcess接受SQL语句 Oracle认识SQL语句,但是不能直接执行,需要解析
A.SQL--被解析生成执行计划,然后Oracle才能执行
B.解析:判断SQL语法-->SQL涉及的表和视图是否存在/SQL所访问的一些表和视图是否有权限-->判断如何去执行(通过访问各种资源作出判断,找出最优的执行方案)-->生成执行计划
解析会消耗很多资源【CPU(主要)、IO】 执行计划会缓存(放在Shared Pool),如果生成的执行计划在缓存中找到了,直接从缓存中执行
Server Process去(1.找shared pool是否存在SQL对应的执行计划),不存在就(2.对SQL语句进行解析)
C.执行计划执行的时候就去取数据
D.serverp rocess根据执行计划去执行,从dbf文件中取出数据并返给用户
D-1.Server process从buffercache中去找数据,如果有,直接从buffer cache中取出并返给用户(产生逻辑IO)
D-2.如果buffer cache中没有所需数据,就从dbf中找到(1次物理IO),并存放到buffer cache中,从buffercache中返给用户(1次逻辑IO)。
逻辑IO 从内存里读
物理IO 从磁盘上读
命中率: 缓存中
命中率=L/(L+P) 逻辑读/(逻辑读+物理读)
逻辑读99/(逻辑读99次+物理读1次)=99%
命中率低肯定有问题
命中率=10W/11W 物理读1W 逻辑读10W 所以命中率高并不一定没问题!
vmstat iostat
tps 每秒传输次数
Blk_read/s 每秒读物理块数
2.修改数据 DBWR
server process在内存中对oracle表进行的任何修改,都会产生日志,并写入到redo buffer
(server process进程只负责读,反馈给用户,给用户的感知很快)
优化:从server process下手,看那个server process快,那个慢
DBWn进程将内存中被修改后的数据写入到数据文件中,LGWR将redo buffer中的数据写入到日志文件中
3.检查点进程 CKPT 周期进行,把数据库当前的一些状态信息写到控制文件和数据库文件头部
较轻松
4.系统监控进程 SMON 对数据库内部进行清理(主内)
对共享池的碎片进行整理
5.进程监视进程 PMON 对server process进程进行清理,清理PGA(主外)
6.归档进程 ARCn
默认3组log文件
7.缓冲区的数据状态
已连接
干净
空闲或未使用
脏
在内存中的状态
A.从dbf读到内存 干净的
B.被serverprocess锁定(进行读或写的瞬间) 已连接 (pin住)
C.被修改后的数据 脏的
D.再从dbf读第二个数据 优先使用干空闲的内存块
E.如果内存块中没有了空闲的 就覆盖掉干净的数据块
阅读(1303) | 评论(0) | 转发(0) |