亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

dbms_stats使用

系統 1620 0

dbms_stats包問世以后,Oracle專家可通過一種簡單的方式來為CBO收集統計數據。目前,已經不再推薦你使用老式的分析表和 dbms_utility方法來生成CBO統計數據。那些古老的方式甚至有可能危及SQL的性能,因為它們并非總是能夠捕捉到有關表和索引的高質量信息。 CBO使用對象統計,為所有SQL語句選擇最佳的執行計劃。

dbms_stats能良好地估計統計數據(尤其是針對較大的分區表),并能獲得更好的統計結果,最終制定出速度更快的SQL執行計劃。

下邊給出了dbms_stats的一次示范執行情況,其中使用了options子句。

execdbms_stats.gather_schema_stats( -
ownname => 'SCOTT', -
options => 'GATHER AUTO', -
estimate_percent => dbms_stats.auto_sample_size, -
method_opt => 'for all columns size repeat', -
degree => 15 -
)

為了充分認識dbms_stats的好處,你需要仔細體會每一條主要的預編譯指令(directive)。下面讓我們研究每一條指令,并體會如何用它為基于代價的SQL優化器收集最高質量的統計數據。

options參數
使用4個預設的方法之一,這個選項能控制Oracle統計的刷新方式:

gather——重新分析整個架構(Schema)。
gather empty——只分析目前還沒有統計的表。
gather stale——只重新分析修改量超過10%的表(這些修改包括插入、更新和刪除)。
gather auto——重新分析當前沒有統計的對象,以及統計數據過期(變臟)的對象。注意,使用gather auto類似于組合使用gather stale和gather empty。
注 意,無論gather stale還是gather auto,都要求進行監視。如果你執行一個alter table xxx monitoring命令,Oracle會用dba_tab_modifications視圖來跟蹤發生變動的表。這樣一來,你就確切地知道,自從上一次 分析統計數據以來,發生了多少次插入、更新和刪除操作。


estimate_percent選項
以下estimate_percent參數是一種比較新的設計,它允許Oracle的dbms_stats在收集統計數據時,自動估計要采樣的一個segment的最佳百分比:
estimate_percent => dbms_stats.auto_sample_size

要驗證自動統計采樣的準確性,你可檢視dba_tables sample_size列。一個有趣的地方是,在使用自動采樣時,Oracle會為一個樣本尺寸選擇5到20的百分比。記住,統計數據質量越好,CBO做出的決定越好。

method_opt選項
dbms_stats的method_opt參數尤其適合在表和索引數據發生變化時刷新統計數據。method_opt參數也適合用于判斷哪些列需要直方圖(histograms)。

某些情況下,索引內的各個值的分布會影響CBO是使用一個索引還是執行一次全表掃描的決策。例如,假如在where子句中指定的值的數量不對稱,全表掃描就顯得比索引訪問更經濟。

如果你有一個高度傾斜的索引(某些值的行數不對稱),就可創建Oracle直方圖統計。但在現實世界中,出現這種情況的機率相當小。使用CBO時,最常見的錯誤之一就是在CBO統計中不必要地引入直方圖。根據經驗,只有在列值要求必須修改執行計劃時,才應使用直方圖。

為 了智能地生成直方圖,Oracle為dbms_stats準備了method_opt參數。在method_opt子句中,還有一些重要的新選項,包括 skewonly,repeat和auto:method_opt=>'for all columns size skewonly'
method_opt=>'for all columns size repeat'
method_opt=>'for all columns size auto'

skewonly選項會耗費大量處理時間,因為它要檢查每個索引中的每個列的值的分布情況。

假 如dbms_stat發現一個索引的各個列分布得不均勻,就會為那個索引創建直方圖,幫助基于代價的SQL優化器決定是進行索引訪問,還是進行全表掃描訪 問。例如,在一個索引中,假定有一個列在50%的行中,如清單B所示,那么為了檢索這些行,全表掃描的速度會快于索引掃描。-- *************************************************************
-- SKEWONLY option—Detailed analysis
--
-- Use this method for a first-time analysis for skewed indexes
-- This runs a long time because all indexes are examined
--*************************************************************
begin
dbms_stats.gather_schema_stats(
ownname => 'SCOTT',
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all columns size skewonly',
degree => 7
);
end;


重 新分析統計數據時,使用repeat選項,重新分析任務所消耗的資源就會少一些。使用repeat選項(清單C)時,只會為現有的直方圖重新分析索引,不 再搜索其他直方圖機會。定期重新分析統計數據時,你應該采取這種方式。-- **************************************************************
-- REPEAT OPTION - Only reanalyze histograms for indexes
-- that have histograms
--
-- Following the initial analysis, the weekly analysis
-- job will use the “repeat” option. The repeat option
-- tells dbms_stats that no indexes have changed, and
-- it will only reanalyze histograms for
-- indexes that have histograms.
--**************************************************************begin
dbms_stats.gather_schema_stats(
ownname => 'SCOTT',
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all columns size repeat',
degree => 7
);
end;

使 用alter table xxx monitoring;命令來實現Oracle表監視時,需要使用dbms_stats中的auto選項。如清單D所示,auto選項根據數據分布以及應 用程序訪問列的方式(例如通過監視而確定的一個列的工作量)來創建直方圖。使用method_opt=>’auto’類似于在dbms_stats 的option參數中使用gather auto。begin
dbms_stats.gather_schema_stats(
ownname => 'SCOTT',
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all columns size auto',
degree => 7
);
end;

并行收集
Oracle允許以并行方式來收集CBO統計數據,這就顯著提高了收集統計數據的速度。但是,要想并行收集統計數據,你需要一臺安裝了多個CPU的SMP服務器。

更快的執行速度
dbms_stats 是提高SQL執行速度的一種出色機制。通過使用dbms_stats來收集最高質量的統計數據,CBO能夠正確判斷執行任何SQL查詢時的最快途徑。 dbms_stats還在不斷地改進。目前,它的一些令人激動的新特性(自動樣本大小和自動直方圖生成)已經顯著簡化了Oracle專家的工作。




在使用DBMS_STATS分析表的時候,我們經常要保存之前的分析,以防分析后導致系統性能低下然后進行快速恢復。
首先創建一個分析表,該表是用來保存之前的分析值。
SQL> begin
2 dbms_stats.create_stat_table(ownname => 'TEST',stattab => 'STAT_TABLE');
3 end;
4 /
PL/SQL 過程已成功完成。
分析表信息
SQL> BEGIN
2 --DBMS_STATS.delete_table_stats(ownname => 'TEST',tabname => 'A');
3 DBMS_STATS.gather_table_stats(ownname => 'TEST',tabname => 'A');
4 END;
5 /
PL/SQL 過程已成功完成。
導出表分析信息到stat_table中。
SQL> BEGIN
2 dbms_stats.export_table_stats(ownname => 'TEST',tabname => 'A',stattab => 'STAT_TABLE');
3 END;
4 /
PL/SQL 過程已成功完成。
SQL>
同理也有
EXPORT_COLUMN_STATS:導出列的分析信息
EXPORT_INDEX_STATS:導出索引分析信息
EXPORT_SYSTEM_STATS:導出系統分析信息
EXPORT_TABLE_STATS:導出表分析信息
EXPORT_SCHEMA_STATS:導出方案分析信息
EXPORT_DATABASE_STATS:導出數據庫分析信息
IMPORT_COLUMN_STATS:導入列分析信息
IMPORT_INDEX_STATS:導入索引分析信息
IMPORT_SYSTEM_STATS:導入系統分析信息
IMPORT_TABLE_STATS:導入表分析信息
IMPORT_SCHEMA_STATS:導入方案分析信息
IMPORT_DATABASE_STATS:導入數據庫分析信息
GATHER_INDEX_STATS:分析索引信息
GATHER_TABLE_STATS:分析表信息,當cascade為true時,分析表、列(索引)信息
GATHER_SCHEMA_STATS:分析方案信息
GATHER_DATABASE_STATS:分析數據庫信息
GATHER_SYSTEM_STATS:分析系統信息
SQL> select count(*) from stat_table;
COUNT(*)
----------
1
刪除分析信息
SQL> BEGIN
2 DBMS_STATS.delete_table_stats(ownname => 'TEST',tabname => 'A');
3 END;
4 /
PL/SQL 過程已成功完成。
導入分析信息
SQL> BEGIN
2 DBMS_STATS.import_table_stats(ownname => 'TEST',tabname => 'A',stattab => 'STAT_TABLE');

dbms_stats使用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久99热久久国产精品 | 久在线视频 | 欧美色网在线 | 国产精品公开免费视频 | 一级特黄特黄的大片免费 | 久久99久久99精品免费看动漫 | 成人高清视频在线观看大全 | 国产日韩欧美一区二区 | 国产永久地址 | 久久99久久99小草精品免视看 | 青草网址 | 亚洲精品一区二区深夜福利 | 91亚洲国产在人线播放午夜 | 欧美精品videossex最新 | 一级aa毛片 | 九九热在线免费 | 福利色姬网站视频入口 | 亚洲欧美另类图片 | 97视频在线看 | 在线免费不卡视频 | a级免费网站 | 国产草草视频 | 国内精品免费网站牛牛 | 青青青国产精品一区二区 | 成人免费高清视频 | 日本一级看片免费播放 | 日本久久中文字幕精品 | 国产成人综合一区精品 | 很狠操 | 日日拍夜夜嗷嗷叫国产 | 久久精品国产亚洲高清 | 国产欧美日韩亚洲精品区2345 | 亚洲福利一区福利三区 | 性成人动作片在线看 | 天天色综合色 | 免费看黄色的网站 | 综合爱爱网 | 99热这就是里面只有精品 | 五月国产综合视频在线观看 | 日韩在线看片中文字幕不卡 | 久久精品加勒比中文字幕 |