首页 > 解决方案 > 如何提高 dbms_stats.gather_schema_stats 的性能

问题描述

使用以下块收集模式统计数据需要 16.30 小时。有什么方法可以提高性能吗?

begin
   dbms_stats.gather_schema_stats(
      ownname          => 'SCHEMA_NAME',
      estimate_percent => dbms_stats.auto_sample_size,
      method_opt       => 'for all columns size AUTO',
      cascade          => true, 
      degree           => 16
   );
end;

此活动每周执行一次,但用户不能等待 16 小时。

我的 Oracle 数据库是 11.2.0 版,并且架构中有一些大分区表,其中数据插入/删除经常发生。

标签: oracleoracle11gdatabase-performance

解决方案


考虑一个额外的参数options,其GATHER AUTO值介于ownname和之间estimate_percent,仅收集没有统计信息或行更改超过 10% 的表的统计信息,以减少时间段,顺便说一下,保留estimate_percent参数,dbms_stats.auto_sample_size因为数据库会自动为您估计值:

begin
   dbms_stats.gather_schema_stats(
      ownname          => 'SCHEMA_NAME',
      options          => 'GATHER AUTO',
      estimate_percent => dbms_stats.auto_sample_size,
      method_opt       => 'for all columns size AUTO',
      cascade          => true, 
      degree           => 16
   );
end;
/

推荐阅读