2024年3月15日发(作者:)
[总结] Oracle表的分析统计
讨论一: 使用dbms_stats 还是analyze
自从Oracle8.1.5引入dbms_stats包, Oracle及专家们就推荐使用dbms_stats取
代analyze。 理由如下:
1. dbms_stats可以并行分析
2. dbms_stats有自动分析的功能(alter table monitor )
3. analyze 分析统计信息的有些时候不准确
第1,2比较好理解,且第2点实际上在VLDB(Very Large Database)中是最吸引人的;
3以前比较模糊,看了metalink236935.1 解释,analyze在分析Partition表的时候,有
时候会计算出不准确的Global statistics 。 原因是dbms_stats会实在的去分析表全局统
计信息(当指定参数);而analyze是将表分区(局部)的statistics 汇总计算成表全局
statistics ,可能导致误差。 没有分区表的情况下两个都可以使用(看个人习惯,当然也可
以分区表使用dbms_stats, 其他使用analyze )。
不过在一些论坛上也有看到dbms_stats 分析之后出现统计数据不准确的情况,而且
确实有bug 在dbms_stats 上(可能和版本有关,有待查明),应该是少数情况,需要我们
注意。 还有,一般不建议analyze 和dbms_stats 混用。 实验: 如果在分区表上用
dbms_stats统计后,再使用 analyze table 来统计,就会出现表信息不被更新的问题。 删
除统计信息后再分析就更新了,或者直接用dbms_stats分析。 dbms_stats 目前有遇到
的bug例子如下:
/?tid=959290&highlight=dbms%5C_stats
dbms_stats包可以分析table、Index或者整个用户(schema),数据库,可以并行分
析。
不同版本包有些不一样, dbms_utility (8i以前的工具包),dbms_stats (8i或以后提
供的工具包) ,具体的dbms_stats 包的众多功能介绍见后面。
对命令与工具包的一些总结:
1、对于分区表,建议使用DBMS_STATS,而不是使用Analyze语句。
a) 可以并行进行,对多个用户,多个Table
b) 可以得到整个分区表的数据和单个分区的数据。
c) 可以在不同级别上Compute Statistics:单个分区,子分区,全表,所有分区
d) 可以导出统计信息
e) 可以用户自动收集统计信息(alter table monitor )
2、DBMS_STATS的缺点:
a) 不能Validate Structure (注意:validate structure 主要在于校验对象的有效性.
发布者:admin,转转请注明出处:http://www.yc00.com/news/1710461159a1760715.html
评论列表(0条)