oracle12c創(chuàng)建數(shù)據(jù)庫(kù)實(shí)踐分析
推薦 + 挑錯(cuò) + 收藏(0) + 用戶(hù)評(píng)論(0)
為了選擇最佳執(zhí)行計(jì)劃,優(yōu)化器必須可以獲得有代表性的統(tǒng)計(jì)信息。有代表性的統(tǒng)計(jì)數(shù)據(jù)不必是最新的,而是一組能夠幫助優(yōu)化器確定執(zhí)行計(jì)劃中每個(gè)操作所能返回的行數(shù)。
自動(dòng)統(tǒng)計(jì)信息收集任務(wù)
Oracle會(huì)在預(yù)定義維護(hù)窗口期間 (工作日10pm 到2am 和周末6am 到2am )收集數(shù)據(jù)庫(kù)中所有缺失統(tǒng)計(jì)信息或者統(tǒng)計(jì)信息過(guò)期對(duì)象的統(tǒng)計(jì)信息,您可以在Oracle企業(yè)管理器或使用DBMS_SCHEDULER和DBMS_AUTO_TASK_ADMIN軟件包來(lái)更改維護(hù)窗口。

圖3 更改自動(dòng)收集統(tǒng)計(jì)信息作業(yè)運(yùn)行時(shí)間的維護(hù)窗口
如果你已經(jīng)有一個(gè)行之有效的統(tǒng)計(jì)收集程序,或者您想要禁用自動(dòng)收集統(tǒng)計(jì)信息任務(wù),您可以使用如下命令:
begindbms_auto_task_admin.disable( client_name=》‘a(chǎn)uto optimizer stats collection’, operation=》null, window_name=》null);end;/
手工統(tǒng)計(jì)收集
如果您打算手動(dòng)維護(hù)優(yōu)化器的統(tǒng)計(jì)信息,則需要確定何時(shí)去收集統(tǒng)計(jì)信息?;谶^(guò)期的信息您可以決定什么時(shí)候統(tǒng)計(jì)信息應(yīng)該被收集,您可以根據(jù)統(tǒng)計(jì)信息的失效性確定何時(shí)收集統(tǒng)計(jì)信息,就像自動(dòng)作業(yè)一樣,或者基于您的環(huán)境中新數(shù)據(jù)加載的時(shí)間。如果基本的數(shù)據(jù)沒(méi)有明顯變化,則不建議重新收集統(tǒng)計(jì)信息,因?yàn)檫@將不必要地浪費(fèi)系統(tǒng)資源。
如果數(shù)據(jù)僅在預(yù)先定義的 ETL 或 ELT 作業(yè)期間加載到您的環(huán)境中, 則可以將統(tǒng)計(jì)信息收集操作安排為此過(guò)程的一部分。
在線收集統(tǒng)計(jì)信息
在Oracle Database 12c中,在線收集統(tǒng)計(jì)信息”piggybacks”作為直接路徑數(shù)據(jù)加載操作的一部分進(jìn)行收集, 例如, 像使用CTAS的方式創(chuàng)建表,以及IAS方式插入數(shù)據(jù)。收集統(tǒng)計(jì)數(shù)據(jù)作為數(shù)據(jù)加載操作的一部分,這意味著不需要額外的全表掃描,就可以在加載數(shù)據(jù)后立即提供統(tǒng)計(jì)信息。

圖4 在線收集統(tǒng)計(jì)信息為新創(chuàng)建的sales2表提供表和列的統(tǒng)計(jì)信息收集
在線收集統(tǒng)計(jì)信息并不會(huì)收集直方圖和索引統(tǒng)計(jì)信息,因?yàn)檫@些種類(lèi)的統(tǒng)計(jì)信息需要額外的數(shù)據(jù)掃描,這可能在數(shù)據(jù)加載時(shí)對(duì)性能產(chǎn)生較大影響。
如果要收集直方圖或者索引的統(tǒng)計(jì)信息,而不重新收集列的基本統(tǒng)計(jì)信息, 請(qǐng)使用DBMS_STATS.GATHER_TABLE_STATS中新的選擇“OPTIONS”參數(shù)設(shè)置成GATHER AUTO。
請(qǐng)注意,出于性能原因,GATHER AUTO在生成直方圖時(shí),使用行中的樣本數(shù)據(jù)而不是表中的所有數(shù)據(jù)。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
