Oracle

我能從 Optimzer 那裡得到一些理由,為什麼它選擇了某個解釋計劃?

  • June 25, 2014

這不是閱讀解釋計劃。

這與添加任何提示或測量特定查詢的性能無關。

我一直想知道是否有可能為查詢(或查詢的自動跟踪)的給定解釋計劃“詢問”優化器為什麼選擇此計劃而不是其他可用計劃。

  • 有沒有辦法讓數據庫顯示它為同一查詢考慮的不同計劃的比較?
  • 有沒有辦法查看哪些計算進入了計劃顯示的成本?(例如,優化器假設磁碟訪問與記憶體中的內容等)

這個問題的基本原理:據我所知,使用 EXPLAIN PLAN,當數據庫選擇某個執行計劃時,這還不夠/太慢/… DBA 或開發人員一開始並不知道:是否有是該計劃的任何替代方案,而且不知道為什麼,如果開發人員知道替代方案(例如未使用的索引),則不使用替代方案。

是的你可以。

這稱為跟踪 Oracle 優化器。這樣做會創建一個跟踪文件,優化器會在其中轉儲制定計劃時所做的所有推理。

可以在此處找到為特定 SQL 生成跟踪的範例如何跟踪特定 SQL 系統範圍的優化器 - 10053 跟踪事件

您可能需要一點時間來閱讀它,考慮到在跟踪中發現的大量數據,令人驚訝的是,Oracle 甚至抽出時間來執行此操作並在適當的時間返回。

Oracle 的優化器本身就是一門完整的科學。除了@ik_zelf,您還應該查看有助於使 .trc 文件具有人類可讀性的 TKPROF。在這里這裡查看Cary Millsap 的書籍(主要是 Oracle 跟踪)。查看喬納森·劉易斯的和他的部落格了解有關 Oracle 優化器的大量資訊。劉易斯的書有 536 頁長(它只被稱為基本原理!),他說他要再寫一本(還沒有出現)。還有一個稱為“計劃穩定性”(Google it)的概念,如果您對性能感到滿意並且不希望優化器“猜測”您,您可以修復計劃,從而有時會產生次優計劃。這個想法似乎符合“你知道的魔鬼比你不知道的魔鬼更好”的構想——即,一個次優的計劃比一個執行得相當好的計劃更好,但有可能會搞砸如果優化器出現問題,則可以工作。

引用自:https://dba.stackexchange.com/questions/68996