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

Posted 武汉OracleDBA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查看表 和 索引的历史统计信息相关的知识,希望对你有一定的参考价值。

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;--查询统计信息当前保留的天数。

Oracle统计信息(表、索引)更新怎么操作?

看到有人做过这种类似的操作,可以加快SQL的执行速度,我没有弄过,想问下:
A 如何做ORACEL针对某个用户的统计信息更新
B 如何让这种统计信息更新 (定期自动执行,比如一周执行一次)
以上操作可以在PLSQL中操作吗?
我是初学者,没有弄过,还请各位大虾多多指导,谢谢

A. oracle 提供了收集数据库统计信息的系统包,例如统计scott用户信息只需要执行:

exec dbms_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_stat.gather_schema_stats 的参数说请查相关资料,这里就不详述了。

B. 要定期执行用户统计信息很简单,只要在 oracle job 中调用这个过程就可以了,设置好初次调用时间和调用时间间隔即可。

以上的操作都能在plsql中操作。
参考技术A A 如何做ORACEL针对某个用户的统计信息更新

不大明白这个统计信息时什么意思?这个信息时什么信息?统计是个什么概念?

B 如何让这种统计信息更新 (定期自动执行,比如一周执行一次)
采用ORACLE的JOB作业

以上是关于查看表 和 索引的历史统计信息的主要内容,如果未能解决你的问题,请参考以下文章

oracle里表索引列的统计信息

db2查看runstats进度

oracle中的统计信息问题

问题账户需求分析

在创建聚集索引期间是不是会更新表统计信息?

SQL2008R2的 遍历所有表更新统计信息 和 索引重建