Oracle中SQL解析的主要流程

gaopengtttt發表於2011-06-07

轉自

http://www.oracledatabase12g.com/archives/sql%E8%A7%A3%E6%9E%90%E6%B5%81%E7%A8%8B.html

 

Oracle中SQL解析的主要流程:
sql_parse_digram

我們說的遊標概念比較複雜,它可以是客戶端程式中的遊標,服務程式中的私有遊標,以及伺服器端共享池裡的共享遊標。假設一個遊標被開啟了,一般來說它的共享遊標資訊(包括執行計劃,優化樹等)總是會在SQL AREA裡,無需再次軟/硬解析。

SESSION_CACHED_CURSORS是Oracle中的一個初始化引數(修改必須重啟例項),指定了每個會話快取的遊標上限(保留在PGA中);客戶端程式中open cursor的要求仍會被傳遞給服務程式,服務程式首先掃描自身快取的遊標資訊,如果命中則可以避免軟解析,也有人稱它為“軟軟解析”。

HOLD_CURSOR是預編譯程式中的一個引數,它指定了私有遊標是否因該被快取,這裡不做展開。

在分析工具tkprof中hard parse與soft parse被同等對待,都被認為是parse;軟解析即會造成parse總數上升。

軟解析避免了硬解析過程中的幾個步驟,但仍包括了初始化的語法,語義解析並計算語句HASH值與SQL AREA中已有語句進行對比;若匹配則查詢優化等昂貴的操作得以避免。

另請注意,10053事件僅在硬解析過程中被觸發。

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

相關文章