spm總體說明
目錄
1、如何工作
2、何時(shí)使用
1、如何工作
sql plan baseline 是一個(gè)關(guān)聯(lián)sql 語句的對象,設(shè)計(jì)會(huì)影響查詢優(yōu)化器生成執(zhí)行計(jì)劃,更具體的說,一個(gè)sql baseline包含其中的一些內(nèi)容,一個(gè)或多個(gè)執(zhí)行計(jì)劃的一組HINTS信息,基本上一個(gè)SQL plan baselines被使用會(huì)強(qiáng)制使查詢優(yōu)化器對于一個(gè)給定的sql語句生成一致的執(zhí)行計(jì)劃。
不是所有的HINTS都存儲在SQL plan baselines中,有哪些不能存儲呢?
SELECT name FROM v$sql_hint WHERE version_outline IS NULL
雖然 眾多的HINTS不存儲在sql plan baselines中但是不會(huì)影響執(zhí)行計(jì)劃(如:gather_plan_statistics)。還有一些其他會(huì)影響(如materialize和inline),這種結(jié)果,一些執(zhí)行計(jì)劃不能強(qiáng)制通過sql plan baseline 無需指定hint的模式
sql plan baseline其中一個(gè)好處他應(yīng)用指定的sql語句,不需要修改sql 語句。實(shí)際上,sql plan baselines被存儲與sql 管理基中,查詢優(yōu)化器自動(dòng)選擇他們,基本的步驟:
- 第一:常規(guī)方法sql語句被解析,換句話說,查詢優(yōu)化器在沒有sql plan baseline的支持下生成一個(gè)執(zhí)行計(jì)劃
- 之后,查詢優(yōu)化使sql語句無大小寫敏感并文本中的空格內(nèi)容可以忽略,sql 語句的結(jié)果簽名(signature)被計(jì)算,進(jìn)入sql 管理基中被執(zhí)行,如果一個(gè)sql plan baseline有相同的簽名被找到,被核對確認(rèn)sql語句被優(yōu)化并sql 語句關(guān)聯(lián)的sql plan baseline是相同的,這個(gè)核對是必須的因?yàn)楹灻且粋€(gè)hash 值,隨后,可能會(huì)有沖突。
- 當(dāng)測試成功,查詢優(yōu)化器驗(yàn)證sql plan baseline是否包含這個(gè)生成的執(zhí)行計(jì)劃,如果包含并接受的,就執(zhí)行他
- 如果在sql plan baseline存儲的被接受是其他執(zhí)行計(jì)劃,這個(gè)HINTS關(guān)聯(lián)它被使用其他執(zhí)行計(jì)劃生成。注意如果這個(gè)SQL plan baseline包含若干個(gè)執(zhí)行計(jì)劃,查詢優(yōu)化器選擇最低代價(jià)的一個(gè)。
- 最后,查詢優(yōu)化器核對執(zhí)行計(jì)劃是否通過sql plan baseline的信息提供生成所期望的執(zhí)行計(jì)劃,如果最后核對被滿足,執(zhí)行計(jì)劃可以被使用,如果不能滿足,這個(gè)查詢優(yōu)化器嘗試其他接受的執(zhí)行計(jì)劃,如果他們都不能重現(xiàn),他會(huì)在沒有sql plan baseline重新生成執(zhí)行計(jì)劃。
2、何時(shí)使用
使用sql plan baselines有兩種情況,第一,無論你何時(shí)優(yōu)化sql 語句都不能改變應(yīng)用(如,在應(yīng)用中不能把增加hints選項(xiàng))。第二,你應(yīng)該考慮何時(shí)、怎么的原因使用它,你遇到了麻煩的執(zhí)行計(jì)劃不穩(wěn)定,因?yàn)閟ql plan baselinegs的目標(biāo)是強(qiáng)制查詢優(yōu)化器從可以接受的執(zhí)行計(jì)劃的限制列表中選擇一個(gè)執(zhí)行計(jì)劃,當(dāng)你明確想限制查詢優(yōu)化器選擇一個(gè)指定的執(zhí)行計(jì)劃。


浙公網(wǎng)安備 33010602011771號