SQL在shared pool中的解析過程問題

tolywang發表於2010-10-28
Oracle 10.2.0.4   

在網路上看到SQL解析的過程如下,其他過程都瞭解, 其中 邏輯最佳化 部分不是太清楚如何運作的,
生成的語法語義上等同的新的SQL語句是什麼樣子的 ?  難道是類似將SQL中的同義詞轉化為對應的
具體的table資訊或其他實際的 object  等過程 ?  


(1) 包含VPD的約束條件
(2) 語法,語義以及訪問許可權的檢查
(3) 將父遊標儲存到庫快取
只要不存在共享的父遊標,就會在庫快取中分配一些記憶體,並將新產生的父遊標儲存進去。
與父遊標有關的關鍵資訊就是這個sql語句的文字。
(4) 邏輯最佳化 --  用一定的轉換技巧,生成語法語義上等同的新的sql語句。
(5)物理最佳化 --  首先,生成與每個邏輯最佳化產生的sql語句有關的執行計劃,接著。根據資料字典找到相關的統計資訊或者動態收集
的統計資訊,計算出一個與執行計劃相關的開銷。最後,選中最低開銷的執行計劃。簡單來說,查詢最佳化器透過探索搜尋空間來尋找最有效的
執行計劃
(6) 將子游標儲存到庫快取  --  首先分配記憶體,然後將共享子游標儲存進去,最後將它與父遊標關聯,與子游標有關的關鍵
內容是執行計劃和執行環境,一旦儲存到庫快取,父遊標與子游標就可以分別透過檢視v$sqlarea和v$sql被具體化。






如果是這樣的,那麼上面的1~6 的順序,和韓思捷的 <>中第五章的硬解析的步驟順序不一樣。
其中 :

1.  檢查文法,  若有問題,退出解析
2.  檢查物件和列是否存在,  若有問題,退出解析
3.  將物件進行名稱轉換,比如同義詞轉換為實際的物件,  若有問題,退出解析  
4.  檢查物件的許可權 ,  若有問題,退出解析
.......

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

相關文章