spm整體說明

目錄html

一、如何工做sql

二、什麼時候使用測試


一、如何工做

sql plan baseline 是一個關聯sql 語句的對象,設計會影響查詢優化器生成執行計劃,更具體的說,一個sql baseline包含其中的一些內容,一個或多個執行計劃的一組HINTS信息,基本上一個SQL plan baselines被使用會強制使查詢優化器對於一個給定的sql語句生成一致的執行計劃。優化


不是全部的HINTS都存儲在SQL plan baselines中,有哪些不能存儲呢?ui

SELECT name FROM v$sql_hint WHERE version_outline IS NULL

雖然 衆多的HINTS不存儲在sql plan baselines中可是不會影響執行計劃(如:gather_plan_statistics)。還有一些其餘會影響(如materialize和inline),這種結果,一些執行計劃不能強制經過sql plan baseline 無需指定hint的模式設計


sql plan baseline其中一個好處他應用指定的sql語句,不須要修改sql 語句。實際上,sql plan baselines被存儲與sql 管理基中,查詢優化器自動選擇他們,基本的步驟:code

  1. 第一:常規方法sql語句被解析,換句話說,查詢優化器在沒有sql plan baseline的支持下生成一個執行計劃
  2. 以後,查詢優化使sql語句無大小寫敏感並文本中的空格內容能夠忽略,sql 語句的結果簽名(signature)被計算,進入sql 管理基中被執行,若是一個sql plan baseline有相同的簽名被找到,被覈對確認sql語句被優化並sql 語句關聯的sql plan baseline是相同的,這個覈對是必須的由於簽名是一個hash 值,隨後,可能會有衝突。
  3. 當測試成功,查詢優化器驗證sql plan baseline是否包含這個生成的執行計劃,若是包含並接受的,就執行他
  4. 若是在sql plan baseline存儲的被接受是其餘執行計劃,這個HINTS關聯它被使用其餘執行計劃生成。注意若是這個SQL plan baseline包含若干個執行計劃,查詢優化器選擇最低代價的一個。
  5. 最後,查詢優化器覈對執行計劃是否經過sql plan baseline的信息提供生成所指望的執行計劃,若是最後覈對被知足,執行計劃能夠被使用,若是不能知足,這個查詢優化器嘗試其餘接受的執行計劃,若是他們都不能重現,他會在沒有sql plan baseline從新生成執行計劃。

image

二、什麼時候使用

使用sql plan baselines有兩種狀況,第一,不管你什麼時候優化sql 語句都不能改變應用(如,在應用中不能把增長hints選項)。第二,你應該考慮什麼時候、怎麼的緣由使用它,你遇到了麻煩的執行計劃不穩定,由於sql plan baselinegs的目標是強制查詢優化器從能夠接受的執行計劃的限制列表中選擇一個執行計劃,當你明確想限制查詢優化器選擇一個指定的執行計劃。htm

相關文章
相關標籤/搜索