天天看點

看懂執行計劃系列之穩定執行計劃

Oracle Hint

Oracle Hints是一種機制,用來告訴優化器按照我們的告訴它的方式生成執行計劃,它允許使用者在SQL語句中插入相關的文法,進而影響SQL的執行方式。

    Hint的作用

※     調整目标SQL使用的優化器類型

※     調整優化器的優化目标

※     調整表的通路路徑

※     調整表的連接配接類型

※     調整表的連接配接順序

※     提高語句的并行程度

看懂執行計劃系列之穩定執行計劃
看懂執行計劃系列之穩定執行計劃
看懂執行計劃系列之穩定執行計劃

Hint的弊端

▓    Hint是比較"暴力"的一種解決方式,不是很優雅。需要開發人員手工修改代碼。

▓    Hint不會去适應新的變化,隻是在現有的基礎上産生更優的執行計劃。

▓    Hint随着資料庫版本的變化,可能會有一些差異、甚至廢棄的情況。

Oracle stored outline

Oracle stored outline(存儲提綱)是最早的基于提示來控制SQL執行計劃的機制,也是9i以及之前版本唯一可以用來穩定和控制SQL執行計劃的工具。主要的作用是用來保持固定sql語句的執行計劃,讓sql語句的執行計劃在資料庫環境變更(統計資訊、優化器參數、表結果變更等)後還能保持原來的執行計劃。

使 用 場 景

看懂執行計劃系列之穩定執行計劃

①    避免SQL的執行計劃在統計資料不準确的情況(如未能及時收集表或索引的統計資訊)下導緻變化進而引起的性能降低。

②    避免容易因為Bind Peeking導緻SQL執行計劃變差進而引起的性能降低。

③    避免大規模分布實施的應用出現資料庫版本、配置等差別引起的優化器産生不同的執行計劃。

注意事項

從10g以後,outline基本已經被Oracle廢棄并且不在維護。

隻有設定use_stored_outlines參數後才能啟用outline。

建立outline需要create any outline or execute_catelog_role權限 。

SQL Profile

SQL Profile是stored outline的進化版,是為目标SQL提供除了統計資訊之外的其他資訊,比如運作環境、更準确的執行路徑等,以幫助優化器為SQL語句選擇更合适的執行計劃。

WELCOME TO JION US

優點

Ⅰ、更容易生成、更改和控制

Ⅱ、适用範圍廣

Ⅲ、在不改變目标SQL文本的情況下達到穩定執行計劃的效果

Automatic類型的SQL Profile

Automatic類型的SQL Profile其實是目标SQL一些額外的調整資訊,這些資訊存儲在資料字典中。Oracle會使用類似于動态采樣的方法來支援Automatic類型的SQL Profile,在生成執行計劃的時候Oracle會将調整資訊同原SQL的相關統計資訊等内容一起作用進而得到最新的執行計劃

Manual類型的SQL Profile

Manual類型SQL Profile的本質是一堆來源Outline Data部分的Hint組合,可以在不改變目标SQL文本的情況下調整其執行計劃

看懂執行計劃系列之穩定執行計劃

特    殊    說    明

SQL Profile 實際上隻是一種亡羊補牢、被動的技術手段,應用在那些執行計劃已經發生了不好的變更的 SQL上,即當我們發現這些SQL的執行計劃已經出了問題時通過建立SQL Pofle來糾正、穩定這些SQL的執行計劃。也就是說,即便通過建立SQLProfile解決了目标SQL執行計劃變更的問題,依然不能保證系統後續執行的 SQL 的執行計劃就不再發生不好的變更。

SPM(SQL Plan Management)

SPM 是一種主動的穩定執行計劃的手段,能夠保證隻有被驗證過的執行計劃才會被啟用。SPM既能夠主動地穩定執行計劃,又保留了繼續使用新的執行效率可能更高的執行計劃的機會。SPM啟動後,每個SQL的所有執行計劃都有對應的SQL Plan Baseline,可以通過DBA_SQL_PLAN_BASELINE檢視。隻有DBA_SQL_PLAN_BASELINE表中ENABLE和ACCEPTED列的值均為’YES’的SQL Plan Baseline對應的執行計劃才會被Oracle啟用。

獲    取    方    法

自動捕獲(Automatic Initial Plan Capture)

❶設定OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES = Ture

❷Oracle自動監控執行兩次以上的SQL語句,将執行計劃記入Plan History。

❸生成的第一個執行計劃被标記為ENABLED并且是ACCEPTED,後續的執行計劃會被标記為ENABLED但不是ACCEPTED。

❹後續如果關閉了自動捕捉,針對存在baseline的SQL,仍舊會有新的PLAN生成,新的Plan仍會進入Plan History,标記為ENABLED但不是ACCEPTED。

手動導入(Manual Plan Capture)

Oracle支援通過DBMS_SPM包手動管理SPM,可以将SQL執行計劃從高速緩存或現有的SQL優化集中加載到SPM。

看懂執行計劃系列之穩定執行計劃