熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle中的硬解析與軟解析

2013-11-13 15:50:03  來源: Oracle 

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

   加載到共享池中 SQL源代碼被加載到內存中

   語法解析 Oracle檢查語法拼寫錯誤

   語義解析 Oracle驗證來自數據字典的所有表名和列名並且驗證你是否有權訪問這些數據

   查詢轉換 如果允許(query_rewrite=true)oracle將把復雜的SQL轉換為等價的簡單形式

   優化 根據模式的統計信息創建執行計劃(在g中或許會使用動態的樣本統計信息)

   創建可執行文件 Oracle創建一個服務於SQL查詢的調用本地文件的可執行文件

  Oracle提供了 shared_pool_size參數來緩存SQL從而使我們不需要重復解析SQL但是如果shared_pool_size設置太小或者在代碼中使用了非重用的SQL(例如包含直接量where name=fred)SQL語句可能會過期

  在Oracle中軟解析和硬解析的區別是什麼?僅僅是上面用紅色標明的第一步也就是說軟解析不需要重新裝載到共享池(以及相關的內存分配)

  通常很高的解析調用次數(>/秒)表明你的系統有大量不同的SQL語句或者你的SQL語句沒有被重用(例如沒有使用綁定變量)

  硬解析需要把 SQL語句加載到共享池中硬解析比軟解析差很多因為它牽涉到共享池中內存的分配和管理一旦被加載SQL必須完全重新檢查語法和語義以及生成可執行目標

  如果shared_pool_size設置的太小或者SQL語句沒有重用則會發生大量的硬解析

  所以要適當的設置共享池大小並且通過主機變量重用SQL


From:http://tw.wingwit.com/Article/program/Oracle/201311/17371.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.