sql執行期間相關的等待

gaopengtttt發表於2013-06-19
1、使用者請求的SQL,ORACLE進行語法許可權的檢查後獲得hash BUCKET上的library cache鎖存器,找到是否有相同SQL資訊(相同LCO),
如果發生爭用等待LATCH:LIBRARY CAHE,存在則進行第8步,每次SQL PARSING PASESE COUNT(TOTAL)+1這是軟硬解析之和
2、不存在獲得SHARED POOL鎖存器後,尋找空閒列上空閒的CHUNK(及FREE狀態的CHUNK),ORACLE會一直擁有SHARD POOL latch知道找到CHUNK為止,發生爭用出現
shared pool等待事件。
3、如果不存在空閒CHUNK,尋找更大空閒CHUNK分割後使用,剩下的記憶體登記到空閒列
4、如果還是沒摘到,檢索LRU列,找到可以recreate 的CHUNK(及RECREATE狀態的CHUNK)
5、如果還是找不到合適的CHUNK,則增加分配共享記憶體池的剩餘空間(10g可以動態ASSM管理記憶體)
6、如果都是報錯ORA-4031錯誤
7、如果找到CHUNK,SQL相應的HANDLE(LIBRARY CACHE HANDLE)以獨佔模式獲得LIBRARY CACHE LOCK,並且建立LCO資訊,完成後
LIBRARY CACHE LOCK 為NULL模式,然後LIBRARY CACHE PIN以獨佔模式獲得LCO資訊,建立執行計劃,2-7為硬解析,parse count(hard)增加。
8、以SHARD 模式獲得LIBRARY CAHE LOCK和LIBRARY CAHCE PIN,執行SQL,次為執行階段。注意DDL語句會對想用LCO以獨佔模式獲得LIBRARY CACHE LOCK
和LIBRARY CAHCE PIN,如果出現等待則需要等待LIBRARY CACHE LOCK/PIN
9、ORACLE執行結束後進入FETCH階段,此時就釋放lIBRARY cache LOCK/PIN。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-764255/,如需轉載,請註明出處,否則將追究法律責任。

相關文章