查看表 和 索引的历史统计信息

发布时间 2023-04-08 20:56:55作者: 武汉OracleDBA

1、 查看表 和 索引的历史统计信息

select * from WRI$_OPTSTAT_TAB_HISTORY ;

(1) 历史统计信息保存在以下几张表中:

WRI$_OPTSTAT_TAB_HISTORY 表的统计信息

WRI$_OPTSTAT_IND_HISTORY 索引的统计信息

WRI$_OPTSTAT_HISTHEAD_HISTORY 列的统计信息

WRI$_OPTSTAT_HISTGRM_HISTORY 直方图的信息

从视图DBA_TAB_STATS_HISTORY可以查询历史收集统计信息的时间,但是不能查询到行数,所以需要结合基表来查询,查询的SQL语句如下:

登录后复制
SELECT B.OWNER,
B.OBJECT_NAME TABLE_NAME,
TO_CHAR(D.ANALYZETIME, 'YYYY-MM-DD HH24:MI:SS') LAST_ANALYZETIME,
TO_CHAR(D.SAVTIME, 'YYYY-MM-DD HH24:MI:SS') CURR_ANALYZETIME,
D.ROWCNT
FROM SYS.WRI$_OPTSTAT_TAB_HISTORY D, DBA_OBJECTS B
WHERE D.OBJ# = B.OBJECT_ID
AND B.OBJECT_NAME IN
('TEST_STAT', 'TPCCBOKBAL_TMP', 'TPCCBOKBALJN', 'PK_TPCCBOKBAL')
ORDER BY D.OBJ#, D.SAVTIME;

(2) 查询索引的历史统计信息的SQL语句如下:

登录后复制
SELECT B.OWNER,
B.OBJECT_NAME INDEX_NAME,
TO_CHAR(D.ANALYZETIME, 'YYYY-MM-DD HH24:MI:SS') LAST_ANALYZETIME,
TO_CHAR(D.SAVTIME, 'YYYY-MM-DD HH24:MI:SS') CURR_ANALYZETIME,
D.ROWCNT,
D.BLEVEL,
D.LEAFCNT,
D.DISTKEY,
D.CLUFAC
FROM SYS.WRI$_OPTSTAT_IND_HISTORY D, DBA_OBJECTS B
WHERE D.OBJ# = B.OBJECT_ID
AND B.OBJECT_NAME IN ('IND_TEST')
ORDER BY D.OBJ#, D.SAVTIME;

(3)默认情况下统计信息将被保留31天,可以使用下面的命令修改:

EXECUTE DBMS_STATS.ALTER_STATS_HISTORY_RETENTION (XX); --xx是保留的天数

注意:这些统计信息在SYSAUX表空间中占有额外的存储开销,所以应该注意并防止统计信息将表空间填满。

SELECT DBMS_STATS.GET_STATS_HISTORY_RETENTION FROM DUAL;--查询统计信息当前保留的天数。