spm总体说明
目錄
1、如何工作
2、何時(shí)使用
1、如何工作
sql plan baseline 是一個(gè)關(guān)聯(lián)sql 語(yǔ)句的對(duì)象,設(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)化器對(duì)于一個(gè)給定的sql語(yǔ)句生成一致的執(zhí)行計(jì)劃。
不是所有的HINTS都存儲(chǔ)在SQL plan baselines中,有哪些不能存儲(chǔ)呢?
SELECT name FROM v$sql_hint WHERE version_outline IS NULL
雖然 眾多的HINTS不存儲(chǔ)在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語(yǔ)句,不需要修改sql 語(yǔ)句。實(shí)際上,sql plan baselines被存儲(chǔ)與sql 管理基中,查詢優(yōu)化器自動(dòng)選擇他們,基本的步驟:
第一:常規(guī)方法sql語(yǔ)句被解析,換句話說,查詢優(yōu)化器在沒有sql plan baseline的支持下生成一個(gè)執(zhí)行計(jì)劃
之后,查詢優(yōu)化使sql語(yǔ)句無大小寫敏感并文本中的空格內(nèi)容可以忽略,sql 語(yǔ)句的結(jié)果簽名(signature)被計(jì)算,進(jìn)入sql 管理基中被執(zhí)行,如果一個(gè)sql plan baseline有相同的簽名被找到,被核對(duì)確認(rèn)sql語(yǔ)句被優(yōu)化并sql 語(yǔ)句關(guān)聯(lián)的sql plan baseline是相同的,這個(gè)核對(duì)是必須的因?yàn)楹灻且粋€(gè)hash 值,隨后,可能會(huì)有沖突。
當(dāng)測(cè)試成功,查詢優(yōu)化器驗(yàn)證sql plan baseline是否包含這個(gè)生成的執(zhí)行計(jì)劃,如果包含并接受的,就執(zhí)行他
如果在sql plan baseline存儲(chǔ)的被接受是其他執(zhí)行計(jì)劃,這個(gè)HINTS關(guān)聯(lián)它被使用其他執(zhí)行計(jì)劃生成。注意如果這個(gè)SQL plan baseline包含若干個(gè)執(zhí)行計(jì)劃,查詢優(yōu)化器選擇最低代價(jià)的一個(gè)。
最后,查詢優(yōu)化器核對(duì)執(zhí)行計(jì)劃是否通過sql plan baseline的信息提供生成所期望的執(zhí)行計(jì)劃,如果最后核對(duì)被滿足,執(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ǔ)句都不能改變應(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ì)劃。
總結(jié)
- 上一篇: 什么是PRC及RPC底层实现(1)
- 下一篇: 第四范式涂威威:打造专属大模型的三大关键