Oracle中的硬解析與軟解析

來源:互聯網
上載者:User

Oracle中的SQL在執行之前進行解析,一個硬解析包括下面的步驟:

  1. 載入到共用池中 - SQL原始碼被載入到記憶體中。
  2. 文法解析 - Oracle檢查文法拼字錯誤。
  3. 語義解析 - Oracle驗證來自資料字典的所有表名和列名並且驗證你是否有權訪問這些資料。
  4. 查詢轉換 - 如果允許(query_rewrite=true),oracle將把複雜的SQL轉換為等價的簡單形式。
  5. 最佳化 - 根據模式的統計資訊建立執行計畫(在10g中或許會使用動態樣本統計資訊)。
  6. 建立可執行檔 - 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。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.