您的位置:首页 > 其它

保证统计信息的准备性

2016-01-25 16:18 375 查看
转载 http://blog.csdn.net/robinson1988/article/details/6321537
作为DBA,我必须定制出收集统计信息的策略,以及相关脚本,下面就是一个关于确保统计信息准确性的脚本,拿出来分享一下。

DECLARE

CURSOR STALE_TABLE IS

SELECT OWNER,

SEGMENT_NAME,

CASE

WHEN SIZE_GB < 0.5 THEN

30

WHEN SIZE_GB >= 0.5 AND SIZE_GB < 1 THEN

20

WHEN SIZE_GB >= 1 AND SIZE_GB < 5 THEN

10

WHEN SIZE_GB >= 5 AND SIZE_GB < 10 THEN

5

WHEN SIZE_GB >= 10 THEN

1

END AS PERCENT,

8 AS DEGREE

FROM (SELECT OWNER,

SEGMENT_NAME,

SUM(BYTES / 1024 / 1024 / 1024) SIZE_GB

FROM DBA_SEGMENTS

WHERE OWNER = 'ADWU_OPTIMA_AP11'

AND SEGMENT_NAME IN

(SELECT /*+ UNNEST */ DISTINCT TABLE_NAME

FROM DBA_TAB_STATISTICS

WHERE (LAST_ANALYZED IS NULL OR STALE_STATS = 'YES')

AND OWNER = 'ADWU_OPTIMA_AP11')

GROUP BY OWNER, SEGMENT_NAME);

BEGIN

DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;

FOR STALE IN STALE_TABLE LOOP

DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => STALE.OWNER,

TABNAME => STALE.SEGMENT_NAME,

ESTIMATE_PERCENT => STALE.PERCENT,

METHOD_OPT => 'for all columns size repeat',

DEGREE => 8,

GRANULARITY => 'ALL',

CASCADE => TRUE);

END LOOP;

END;

/

根据实际情况,可以选择每天晚上在数据库不繁忙的时候运行上述脚本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: