oracle中的sql在執行之前進行解析,乙個硬解析包括下面的步驟:
載入到共享池中 - sql源**被載入到記憶體中。
語法解析 - oracle檢查語法拼寫錯誤。
語**析 - oracle驗證來自資料字典的所有表名和列名並且驗證你是否有權訪問這些資料。
查詢轉換 - 如果允許(query_rewrite=true),oracle將把複雜的sql轉換為等價的簡單形式。
優化 - 根據模式的統計資訊建立執行計畫(在10g中或許會使用動態的樣本統計資訊)。
建立可執行檔案 - oracle建立乙個服務於sql查詢的、呼叫本地檔案的可執行檔案。
oracle提供了shared_pool_size引數來快取sql從而使我們不需要重複解析sql。但是,如果shared_pool_size設定太小或者在**中使用了非重用的sql(例如包含直接量where name="fred"),sql語句可能會過期。
在oracle中軟解析和硬解析的區別是什麼?僅僅是上面用紅色標明的第一步。也就是說,軟解析不需要重新裝載到共享池(以及相關的記憶體分配)。
通常很高的解析呼叫次數(>10/秒)表明你的系統有大量不同的sql語句,或者你的sql語句沒有被重用(例如,沒有使用繫結變數)。
硬解析需要把sql語句載入到共享池中。硬解析比軟解析差很多,因為它牽涉到共享池中記憶體的分配和管理。一旦被載入,sql必須完全重新檢查語法和語義以及生成可執行目標。
如果shared_pool_size設定的太小或者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硬解析 軟解析 軟軟解析 理解
硬解析 library cache 中不存在父游標或者存在父游標,但是沒有子游標 軟解析 library cache中存在父游標 子游標 軟軟解析 會話pga中存在session cursor 一條新的sql查詢,開始硬解析,會先將sql語句經過ascii轉換,通過hash演算法去遍歷library...