游標解析過程
(1)包含vpd約束條件--如果使用了虛擬私有資料庫,並且被解析的sql語句中引用的某張表啟用了它的話,安全策略生成的約束條件就會被新增到where語句中。
(2)語法語義以及訪問許可權檢查
(3)儲存父游標--不存在共享的父游標,將在庫快取中分配一些記憶體,將父游標儲存進去
(4)邏輯優化--通過優化手段生成等價意義的sql語句,同時可選擇的執行計畫數量與搜尋空間都會增長
(5)物理優化--回城生與每個邏輯優化產生的sql語句相關的執行計畫,同時根據統計資訊,計算執行計畫所用的開銷並選擇最優的執行計畫
(6)儲存子游標--分配記憶體,將共享子游標儲存進去,最後將子游標和父游標進行關聯
當只執行前兩個步驟時,成為軟解析,否則為硬解析,其中關鍵的第五步非常耗資源:第乙個原因是邏輯優化和物理優化非常依賴cpu的操作;第二個原因是需要分配
父游標和子游標到庫快取中,由於庫快取是所有會話共享的,因此庫快取的記憶體分配必須序列執行。
在實際操作中,為了分配父游標和子游標,需要取得共享池的鎖。
例:select * from t where n=1234;
select * from t where n=1234;
select * from t where n=1234;
這三條語句不會共享父游標,因為大小寫和空格不一致的關係。
例:alter session set optimizer_mode=all rows;
select * from t;
alter session set optimizer_mode=first_rows_10;
select * from t;
這兩條語句的子游標也不會被共享,因為執行環境發生了變化。值得注意的時,它們仍然使用同乙個執行計畫。
所以與父游標相關的sql文字,與子游標相關的時執行計畫和執行環境。而硬解析通常是由不可共享的父游標導致,而在不使用繫結變數以及動態sql語句時硬解析就無法避免。
Oracle的硬解析和軟解析
提到軟解析 soft parse 和硬解析 hard parse 就不能不說一下oracle對sql的處理過程。當你發出一條sql語句交付oracle,在執行和獲取結果前,oracle對此sql將進行幾個步驟的處理過程 1 語法檢查 syntax check 檢查此sql的拼寫是否語法。2 語義檢查...
Oracle的硬解析和軟解析
提到軟解析 soft prase 和硬解析 hard prase 就不能不說一下oracle對sql的處理過程。當你發出一條sql語句交付oracle,在執行和獲取結果前,oracle對此sql將進行幾個步驟的處理過程 1 語法檢查 syntax check 檢查此sql的拼寫是否語法。2 語義檢查...
Oracle SQL的硬解析 軟解析 軟軟解析
oracle中每條sql在執行前都要解析,解析分為硬解析 軟解析 軟軟解析。oracle會快取dml語句,相同的dml語句會進行軟解析。但不會快取ddl語句,所以ddl每次都做硬解析。硬解析是乙個很耗時的操作,所以應用程式內部很少執行執行ddl。ddl一般在部署前執行。sql語句執行步驟 1.語法檢...