高级OWI与ORACLE性能调整读书笔记之SQL的过程执行

来源:互联网 发布:淘宝金牌卖家怎么开通 编辑:程序博客网 时间:2024/05/22 03:38

 

用户请求执行新的SQL时,Oracle则会利用相关的内存和锁存器执行必要的工作。将这些内容按照时间整理结果如下

1.         用户执行新的SQL时。Oracle在执行基本语法和权限检查等步骤后,获得Hash bucketlibrary cache锁存器,然后确认库高速缓冲区上是否存在相同的SQL,即相同的LCO。若在获得library cache锁存器的过程中发生争用,则等待latch:library cache事件。存在相同的LCO时直接跳至第8阶段执行,此过程称之为Soft Parsing。每当发生SQL Parsing请求时。Oracle都会增加parse count (total)统计值。

2.         若不存在相同SQL.在获得share pool锁存器后,从空闲列上查找最适合大小的空闲chunk。如果在获得shared pool锁存器的过程中发生争用,则等待latch:shared pool事件。Oracle会一直拥有shared pool锁存器,直到确保chunk为止。

3.         若不存在适合大小的空闲chunk,则查找更大空闲chunk后分割(split)使用。分割后剩下的内存区域重新登记到适当的空闲列。

4.         若检索了所有的空闲列都没有找到恰当的空闲chunk,则检索LRU列。LRU列上的chunk是重建的,而且是当前不使用的。

5.         若在LRU列上检索也不能确保适当大小的chunk,则最佳分配共享池内剩余的内存空间。

6.         以上过程如果均失败,则发生错误ORA-4031.

7.         若找到适当的chunk,对SQL相应的Handle(library cache handle)Exclusive模式获得library cache lock,并创建LCO信息。创建LCO后,library cache lock变换为null模式,将library cache pinExclusive模式获得后,创建执行计划(explain plan).2-7过程陈伟Hard Parsing。如若发生Hard ParsingOracle将增加parse count(hard)统计值。若在Hard Parsing过程中发现SQL语句错误(入参照不存在的对象等),则parse count(failure)统计值将会一起增加。

8.        OracleSQL Cursorshared模式获得library cache locklibrary cache pin,并执行SQL。这个阶段称为执行阶段。SQL Cursor所参考的LCO(表,Procedure),基本上与SQL Cursor相同的模式获得的library cache locklibrary cache pin。但是执行修改对象信息(DDL语句)工作时,对相应对象所对应的LCOExclusive模式获得Library cache locklibrary cache pin。例如‘alter table xxx add varchar2(10),这个SQL语句在执行阶段,对于SQL Cursor自身是以Shared模式获得Library cache lock,但是对于表xxx所对应的的LCO是以Exclusive模式获得library cache locklibrary cache pin过程中发生争用,则各自需要等待library cache locklibrary cache pin事件。

9.        Oracle对执行结束的SQL Cursor Fetch数据。这个过程就是Fetch阶段。在Fetch阶段,SQL Cursorlibrary cache lock变换为Null模式,并解除library cache pin