一般来说,数据库处理sql都会经过三个过程:解析(parse)、执行(exec)、返回结果(fetch)
一般来说,数据库处理sql都会经过三个过程:解析(parse)、执行(exec)、返回结果(fetch)
1.解析
当用户发起一个sql语句时,oracle通过server process 接收sql语句到达oracle实例,并在shared pool 中的 library cache 查找是否存在该语句对应执行计划的缓存。
如果不存在则将该sql进行硬解析(hard parse),生成最优化的执行计划(plan),并将该执行计划等信息载入library cache。
如果存在则不经过硬解析,而是直接进行软解析(soft parse),从而减少数据库的分析时间。
2.执行
server process首先在buffer cache中查找是否存在该执行计划所对应的数据块,如果存在,就直接进行dml操作(逻辑io),否则应从数据文件中将数据块读取到buffer cache中,再进行dml操作(物理io)。
3.返回结果
对于select语句需要返回结果,首先看是否需要排序,,如果需要则排序后返回给用户。
对于其他dml语句(insert/delete/update),则无需返回结果。当buffer cache中的数据块被修改时,server process将自动记录buffer的改变过程到sga中的redo log buffer,最终分别由dbwr和lgwr进程负责将buffer cache中的脏数据块和redo log buffer中的日志写到磁盘中的data file和redo log file。
解析类型:硬解析、软解析、软软解析
对sql的解析都需要频繁地访问数据字典
硬解析:
判断sql语句是否存在语法、语义的问题
判断sql语句所涉及的对象(表、视图)是否存在
判断执行sql语句的用户对涉及的对象是否有权限
选择最优的执行方案,生成执行计划
其中生成执行计划最消耗系统资源(cpu、i/o、memory),尤其是cpu和i/o资源
软解析:只判断sql语句的语法、语义、对象权限,而不生成执行计划
软软解析:不解析
sql> select name,value from v$sysstat where name like 'parse%' ;
name value
------------------------------ ----------
parse time cpu 1339
parse time elapsed 17374
parse count (total) 23639
parse count (hard) 3060
parse count (failures) 149
parse count (describe) 9
oracle体系结构系列相关文章:
oracle体系结构之scn、实例恢复
oracle体系结构之检查点
oracle体系结构之sql语句的执行过程
更多详情见请继续阅读下一页的精彩内容:
