首页 文章

Oracle收集表统计时间

提问于
浏览
1

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

Oracle版本是

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);

我们无法更改上述gather stats命令的参数,因为应用程序供应商坚持使用这些参数 .

如果我们可以做些什么来减少收集统计工作所花费的时间,请告诉我 . 我注意到JOB运行时会导致应用程序性能降低一点,这是不可接受的 .

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

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

Will a ALTER TABLE Shrink reduce the overall time taken to collect statistics on the table? Is it recommended?

1 回答

  • 3

    是的,缩小的空间将有所帮助 . 如果你有能力将应用程序关闭一段时间,并且表格不会直接反弹到之前的大小,那么缩小空间总是一个好主意 .

    除此之外,如果参数不够多,你可以做些改进 . 在某些情况下,设置 DEGREE 参数可以显着提高性能 . 我知道你说你可以't change any parameters, but I don'看看他们怎么会抱怨那个 . 虽然它可能使作业运行得更快,但它可能会更多地影响系统性能(但是在更短的时间内) .

    最好的解决方案可能是升级到11g,任何理智的应用程序都会使用 estimate_percent => dbms_stats.auto_sample_size . 11g的统计收集比10g好很多 . 通过improved auto sample algorithmsincremental statisticssetting statistics preferencesconcurrent statistics等功能,收集统计信息通常更快,更准确 .

相关问题