關於硬解析和軟解析

2021-06-01 11:00:35 字數 970 閱讀 9552

游標解析過程

(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.語法檢...