1

收集一些 Oracle 表的统计信息需要很长时间。这些表的记录数从 200 万条记录到 900 万条记录不等。这些表中的每一个都有大约 5-6 个索引。

甲骨文版本是

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
PL/SQL Release 10.2.0.1.0 - Production
"CORE   10.2.0.1.0  Production"
TNS for IBM/AIX RISC System/6000: Version 10.2.0.1.0 - Productio
NLSRTL Version 10.2.0.1.0 - Production

收集统计数据语法是

dbms_stats.gather_table_stats('OWNER', 'TABLE_NAME', estimate_percent => 100, method_opt => 'for all columns size auto', cascade => true);

我们无法更改上述收集统计命令的参数,因为应用程序供应商坚持使用这些参数。

请让我知道我们是否可以做些什么来减少收集统计作业所花费的时间。我注意到 JOB 在运行时会导致应用程序性能下降一点,这是不可接受的。

我还注意到一些表在磁盘上占用了大量空间,但实际数据(通过估计记录数乘以平均行长度)要少得多。看起来表格需要压缩/缩小/高水位线重置等。

例如,某些表在磁盘上占用 9 GB,但实际数据显示为 1.2 GB。. . 碎片化浪费了近 70% 的空间。

ALTER TABLE Shrink 会减少收集表上的统计信息所花费的总时间吗?推荐吗?

4

1 回答 1

3

是的,缩小空间会有所帮助。如果您有能力将应用程序关闭一段时间,并且表格不会立即恢复到之前的大小,那么缩小空间始终是一个好主意。

除此之外,如果参数不能改变,那么你也无能为力。在某些情况下,设置DEGREE参数可以显着提高性能。我知道你说你不能改变任何参数,但我不明白他们怎么会抱怨那个。尽管它可能使作业运行得更快,但它可能会更大地影响系统性能(但时间更短)。

最好的解决方案可能是升级到 11g,任何理智的应用程序都会使用estimate_percent => dbms_stats.auto_sample_size. 11g 中的统计收集比 10g 好得多借助改进的自动采样算法增量统计设置统计首选项并发统计等功能,收集统计数据通常更快、更准确。

于 2013-09-09T04:50:11.913 回答