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

Oracle數據庫的數據統計(Analyze)

系統 1784 0

Oracle數據的優化器有兩種優化方法:基于代價/成本的優化器(CBO)和基于規則的優化器(RBO),系統在對SQL進行優化的時候,使用哪 種優化決定于初始化參數OPTIMIZER_MODE,該參數值可以設置為:CHOOSE,RULE,ALL_ROWS,FIRST_ROWS。在 Oracle9i以后的版本中還引入了新的優化參數命令:FIRST_ROWS_1,FIRST_ROWS_10, FIRST_ROWS_100,FIRST_ROWS_1000。(具體的說明將在以后的BLOG文章中介紹)Oracle推薦使用CBO優化方式,當系 統使用CBO方式優化SQL的時候,要使其執行計劃達到最優化,需要定期執行數據統計,必須保證統計數據的及時性,否則可能得不到預計的優化效果,或與預 計的優化效果相差懸殊。


要對數據庫對象生成統計信息,可以有以下方法:

完全統計法:analyze table table_name compute statistics;
抽樣估計法:analyze table table_name estimate statistics sample 30 percent;


對表使用抽樣估計法要比完全統計法的生成統計速度要快,但是統計數據可能不夠精確。在開發過程中,我們可能要涉及很多的表的查詢,而我們在使用CBO的時候就需要經常對這些表執行分析統計,得到CBO所需要的統計數據。通常有以下幾種方法來收集統計信息:


1.導出所有需要分析的表的語句腳本,然后執行該腳本。

SQL> SPOOL OFF;
SQL> SPOOL C:\ANALYZE_TAB.SQL
SQL> SELECT 'ANALYZE TABLE '||OWNER||'.'||TABLE_NAME||' COMPUTE STATISTICS;' FROM ALL_TABLES WHERE OWNER NOT IN ('SYS','SYSTEM');

然后調整一下腳本,并執行:
SQL>@C:\ANALYZE_TAB.SQL

可以將該腳本放到服務器端并設置自動執行。


2.使用Oracle提供的過程:DBMS_DDL.ANALYZE_OBJECT,該過程可以對某個特定用戶的特定表執行統計。例如:

完全統計:
SQL>execute dbms_ddl.analyze_object('TABLE','DINYAR','DINYA_TEST01','COMPUTE');

PL/SQL procedure successfully completed
SQL>

50%抽樣統計
SQL>execute dbms_ddl.analyze_object('TABLE','DINYAR','DINYA_TEST01','ESTIMATE',NULL,50);

PL/SQL procedure successfully completed

可以使用該過程,生成分析統計數據庫對象的腳本,并定時執行該腳本。


3.使用Oracle提供的過程DBMS_UTILITY.ANALYZE_SCHEMA該過程執行對某個特定用戶下的TABLE,INDEX和CLUSTER的分析統計。如:

完全統計SCHEMA下的所有對象:
SQL> execute dbms_utility.analyze_schema('DINYAR','COMPUTE');

PL/SQL procedure successfully completed
Executed in 6.9 seconds

抽樣50%統計SCHEMA下的所有對象:
SQL> execute dbms_utility.analyze_schema('DINYAR','ESTIMATE',NULL,50);

PL/SQL procedure successfully completed
Executed in 1.933 seconds

從執行的時間上看,抽樣統計的時間要比完全統計所花費的時間要短,執行的更快。

注意: dbms_utility.analyze_schema(SCHEMA,METHOD,ESTIMATE_ROWS,ESTIMATE_PERCENT,METHOD_OPT)中SCHEMA須用戶名大寫,參數用單引號''


4.使用Oracle提供的過程DBMS_UTILITY.ANALYZE_DATABASE,該過程可以對整個數據庫中的對象進行分析統計。但需要當前登陸用戶具備足夠的權限,否則系統將提示出錯。如:

SQL> execute dbms_utility.analyze_database('COMPUTE');

begin dbms_utility.analyze_database('COMPUTE'); end;
ORA-20000: You have insufficient privileges for an object in this database.
ORA-06512: at "SYS.DBMS_UTILITY", line 501
ORA-06512: at line 1

改換有DBA權限的用戶登陸:
SQL> execute dbms_utility.analyze_database('COMPUTE');

begin dbms_utility.analyze_database('COMPUTE'); end;
ORA-30657: operation not supported on external organized table
ORA-06512: at "SYS.DBMS_DDL", line 179
ORA-06512: at "SYS.DBMS_UTILITY", line 497
ORA-06512: at line 1

從上面的錯誤信息可以看出,不支持對外部表的分析統計,查看Oracle的解決辦法,Oracle稱不要試圖做這項操作。

DBMS_UTILITY.ANALYZE_DATABASE的抽樣分析統計和上例中類似。


5.使用Oracle提供的過程:DBMS_STATS,該包中的過程dbms_stats.gather_index_stats,

DBMS_STATS.gather_table_stats,DBMS_STATS.gather_schema_stats,DBMS_STATS.gather_database_stats,DBMS_STATS.gather_system_stats 分別執行對索引、表、某個schema、數據庫、系統的統計信息。例如:

SQL> execute dbms_stats.gather_table_stats('DINYAR','DINYA_TEST01');

PL/SQL procedure successfully completed
Executed in 0.29 seconds

SQL> execute dbms_stats.gather_schema_stats('DINYAR');
PL/SQL procedure successfully completed
Executed in 7.07 seconds

(該包中還有其他的一些過程,可以對數據庫的對象進行操作,不在這里討論。)


6.定時執行分析統計,使用DBMS_JOB包,創建一個JOB,定時執行過程,對數據庫對象進行分析統計:

1 用DBMS_UTILITY
declare
jobno number;
begin
dbms_job.submit(:jobno,
????????????????? 'dbms_utility.analyze_schema(user,''compute'');',
?????????????????? trunc(sysdate)
????????????????? 'trunc(sysdate)+1' );
commit;
end;

2 用DBMS_DDL
declare
jobno NUMBER;
BEGIN
DBMS_JOB.SUBMIT(:jobno,
'dbms_ddl.analyze_object(''TABLE'',
''schema'', ''user'',
''compute'');',
SYSDATE, 'SYSDATE + 1');
COMMIT;
END;

PL/SQL procedure successfully completed
Executed in 0.581 seconds
job_num
---------
41

這樣就可以在數據庫中定時執行數據庫對象統計信息的收集,保證了使用CBO優化器優化時優化路徑的準確性。

Oracle提供的包中的其他功能請參考文檔:<<Oracle9i Supplied PL_SQL Packages and Types Reference >>

Oracle數據庫的數據統計(Analyze)


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本欧美一区二区三区乱码 | 亚洲伦理中文字幕 | 免费鲁丝片一级观看 | 四虎影院最新 | 国产亚洲综合精品一区二区三区 | 成人激情视频在线 | 欧美性猛交xx乱大交 | 国产ar高清视频+视频 | 中国大陆一级毛片 免费 | 久久婷婷午色综合夜啪 | 欧美性猛交xxx嘿人猛交 | 日韩国产午夜一区二区三区 | aaaaa级毛片 aaaa级毛片欧美的 | 国产精品亚洲专区在线观看 | 亚洲情综合五月天 | 欧美一级爆毛片 | 狠狠久久亚洲欧美专区 | 中文国产日韩欧美视频 | 欧美日本在线播放 | 九九婷婷 | 亚洲精品777 | 亚洲伊人久久大香线蕉啊 | 日韩美毛片 | 玖玖精品视频在线 | 色多网站免费视频 | 亚洲综合色区图片区 | 一级午夜a毛片免费视频 | 欧洲精品| 夜夜女人国产香蕉久久精品 | 视频二区 中文字幕 欧美 | 欧美综合精品一区二区三区 | 国产精品亚洲一区二区三区正片 | 国产精品久久久久影院免费 | 特级黄色毛片视频 | 中文字幕专区高清在线观看 | 91视频观看| 久久国产高清视频 | 伊人97在线 | 欧洲一区在线观看 | 日本一级毛片不卡免费 | 国偷盗摄自产福利一区在线 |