Oracle CBO 的 _sort_elimination_cost_ratio 參數

來源:互聯網
上載者:User

連續看到幾個和 Oracle 最佳化器隱含參數 _sort_elimination_cost_ratio 相關的最佳化案例(Refer
Refer )。

如果用 _SORT_ELIMINATION_COST_RATIO 作為關鍵字在 Metalink 上查詢,會發現很多和該參數有關的 Bug ,執行計畫的出錯特徵是也走了索引,但是走了索引全掃描(INDEX FULL SCAN),如果做 10053 Trace ,會發現有個煩人的 Recost for ORDER BY 步驟,然後就會引到錯誤的執行計畫上。

在 9i 升級到 10g 最容易遇到這個問題(原來好好的,到了 10g 發現執行計畫有問題了). 出問題的
SQL 一般是走 INDEX RANGE SCAN 然後有個 ORDER BY 會觸發,更多的時候最佳化器模式是 FIRST ROWS — 這樣 Oracle 會盡量消除排序,預設認為排序是開銷昂貴的操作。通過控制 _SORT_ELIMINATION_COST_RATIO 隱含參數的值 (預設是0) 能夠解決這個問題:

ALTER SESSION SET "_SORT_ELIMINATION_COST_RATIO"=5 

其它可能的解決辦法:對索引裡面的排序保持和 SQL 裡的 ORDER by 一致。

其實說白了,很多 Oracle 隱含參數就是為瞭解決 Oracle 特定情況下的 Bug 的,因為不具備普遍性,所以在某些版本中作為隱含參數出現。在生產資料庫上,個別的時候啟用隱含參數倒也不是不行的,只要明白了相應的隱含參數到底是幹啥的就成了。

題外話:_SORT_ELIMINATION_COST_RATIO 相關的 Bug 頻繁出現,倒是感覺和 Oracle 內部代碼管理有關,本來應該消除掉的,怎麼後面的版本又跑了出來?

目前關於 CBO 最好的書籍應該是Jonathan Lewis 的 Cost-Based Oracle Fundamentals ,有中文譯本:《基於成本的Oracle最佳化法則》。是
DBA 不可錯過的一本書。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.