日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Oracle数据库的数据统计(Analyze)

發(fā)布時間:2024/4/17 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle数据库的数据统计(Analyze) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://blog.chinaunix.net/space.php?uid=10597892&do=blog&id=2946800

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

要對數(shù)據(jù)庫對象生成統(tǒng)計信息,可以有以下方法:

完全統(tǒng)計法:analyze table table_name compute statistics;

抽樣估計法:analyze table table_name estimate statistics sample 30 percent;

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

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

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');

然后調(diào)整一下腳本,并執(zhí)行:

SQL>@C:\ANALYZE_TAB.SQL

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

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

完全統(tǒng)計:

SQL>execute dbms_ddl.analyze_object('TABLE','DINYAR','DINYA_TEST01','COMPUTE');

PL/SQL procedure successfully completed

SQL>

50%抽樣統(tǒng)計

SQL>execute dbms_ddl.analyze_object('TABLE','DINYAR','DINYA_TEST01','ESTIMATE',NULL,50);

PL/SQL procedure successfully completed

SQL>

可以使用該過程,生成分析統(tǒng)計數(shù)據(jù)庫對象的腳本,并定時執(zhí)行該腳本。

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

完全統(tǒng)計SCHEMA下的所有對象:

SQL> execute dbms_utility.analyze_schema('DINYAR','COMPUTE');

PL/SQL procedure successfully completed

Executed in 6.9 seconds

SQL>

抽樣50%統(tǒng)計SCHEMA下的所有對象:

SQL> execute dbms_utility.analyze_schema('DINYAR','ESTIMATE',NULL,50);

PL/SQL procedure successfully completed

Executed in 1.933 seconds

SQL>

從執(zhí)行的時間上看,抽樣統(tǒng)計的時間要比完全統(tǒng)計所花費的時間要短,執(zhí)行的更快。

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

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

SQL>

改換有DBA權(quán)限的用戶登陸:

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

SQL>

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

DBMS_UTILITY.ANALYZE_DATABASE的抽樣分析統(tǒng)計和上例中類似。

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分別執(zhí)行對索引、表、某個schema、數(shù)據(jù)庫、系統(tǒng)的統(tǒng)計信息。例如:

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

SQL>

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

6.定時執(zhí)行分析統(tǒng)計,使用DBMS_JOB包,創(chuàng)建一個JOB,定時執(zhí)行過程,對數(shù)據(jù)庫對象進行分析統(tǒng)計:

PL/SQL procedure successfully completed

Executed in 0.581 seconds

job_num

---------

41

SQL>

這樣就可以在數(shù)據(jù)庫中定時執(zhí)行數(shù)據(jù)庫對象統(tǒng)計信息的收集,保證了使用CBO優(yōu)化器優(yōu)化時優(yōu)化路徑的準確性。

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

?

Defrag the below tables and indexes might also help.

?

??????????????????????????????????????????? Segment????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????Reclaimable space(MB)? Allocated????????? USED_SPACE

?

GCD

LOANTRADE_EOD

122.27

704.27

582.01

TABLE

GCD

SWAPTRADE_EOD

97.92

536.00

438.08

TABLE

GCD

SYS_C00314668

93.62

232.00

138.38

INDEX

GCD

PTRSLIQUIDATION_EOD

82.66

456.00

373.34

TABLE

GCD

PF_LIQUDATION_DETAILS_EOD

57.15

176.00

118.85

TABLE

GCD

SYS_C00314931

49.54

104.00

54.46

INDEX

GCD

SYS_C00314466

48.92

120.00

71.08

INDEX

GCD

UK1_ASSETPRICE_RECON

47.71

144.00

96.29

INDEX

GCD

ASSETPRICE_RECON_IDX2

45.98

88.00

42.02

INDEX

GCD

PTRSLIQUIDATION_EOD_CD_IDX

40.30

137.40

97.10

INDEX

GCD

ASSETPRICE_RECON_IDX3

40.18

80.00

39.82

INDEX

GCD

PTRSPOSITION_LFID_CD_IDX_EOD

38.20

62.22

24.01

INDEX

GCD

PTRSLIQUIDATION_EOD_PD_IDX

31.29

113.39

82.11

INDEX

GCD

ASSETPRICE_RECON_IDX1

27.73

72.00

44.27

INDEX

GCD

UK1_ASSETPRICE

25.55

112.00

86.45

INDEX

GCD

PORTFOLIOPOSITION_DETAILS_EOD

25.09

53.00

27.91

TABLE

GCD

PTRSPOSITION_EOD

24.99

104.00

79.01

TABLE

GCD

ASSETPRICE_RECON

23.24

160.00

136.76

TABLE

GCD

LOANTRADE_EOD_CD_IDX

23.23

73.75

50.52

INDEX

GCD

PTRSLIQUIDATION_EOD_SD_IDX

14.97

96.00

81.03

INDEX

總結(jié)

以上是生活随笔為你收集整理的Oracle数据库的数据统计(Analyze)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。