帶您深入了解Oracle SQL計劃管理
Oracle SQL計劃管理可以改善SQL語句性能,下面就為您詳細(xì)介紹Oracle SQL計劃管理方面的知識,供您參考學(xué)習(xí)之用。
Oracle SQL計劃管理
您看到過多少次下面的情況:一個查詢擁有可能的最佳計劃,但一些事情突然發(fā)生,導(dǎo)致該計劃被拋棄。這些事情可能是某人重新對表進行了分析,或者 star_transformation 等影響優(yōu)化程序的參數(shù)被改變 — 各種可能性是無窮無盡的。出于絕望,您可能會禁止對數(shù)據(jù)庫進行任何更改,這意味著不收集數(shù)據(jù)庫統(tǒng)計數(shù)據(jù)、不更改任何參數(shù)等等。
但這說起來容易做起來難。當(dāng)數(shù)據(jù)模式改變時會發(fā)生什么?以自適應(yīng)游標(biāo)一節(jié)中顯示的示例為例。現(xiàn)在,CUSTOMERS 表中填充了來自紐約的客戶,因此 STATE_CODE 大部分為 "NY"。因此,當(dāng)執(zhí)行含有如下所示謂詞的查詢時:
where state_code = 'CT'
系統(tǒng)執(zhí)行一次全表掃描而非索引掃描。當(dāng)謂詞為:
where state_code = 'CT'
由于僅將返回幾行結(jié)果,因此系統(tǒng)使用索引。然而,如果模式發(fā)生改變 - 假設(shè),突然出現(xiàn)大量來自康涅狄格 (state_code = 'CT') 的客戶,導(dǎo)致含有 CT 的結(jié)果的百分比升至 70%,此時會發(fā)生什么?在該情況下,CT 查詢應(yīng)使用全表掃描。但是,由于您已禁止收集優(yōu)化程序統(tǒng)計數(shù)據(jù),優(yōu)化程序不會了解模式的更改,并且會繼續(xù)提供無效率的索引掃描路徑。您可以做些什么?
如果 Oracle 使用最優(yōu)計劃,但在統(tǒng)計數(shù)據(jù)收集或數(shù)據(jù)庫參數(shù)等底層因素更改時重新評估該計劃,此時,當(dāng)且僅當(dāng)新計劃更有效時數(shù)據(jù)庫才會使用,結(jié)果如何?該方案非常理想,不是嗎?它在 Oracle 數(shù)據(jù)庫 11g 中已成為可能。
【編輯推薦】