如何提高dbms_stats.gather_schema_stats的性能

时间:2019-01-12 11:28:21

标签: oracle oracle11g database-performance

使用以下代码块收集架构统计信息花费了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版,架构中有一些大的分区表,其中频繁发生数据插入/删除。

2 个答案:

答案 0 :(得分:0)

考虑一个附加参数options,其值GATHER AUTOownnameestimate_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;
/

答案 1 :(得分:0)

您是否需要始终重新计算整个架构的统计信息?您还可以对单个表或分区甚至单个列执行收集统计信息。将收集统计信息限制为数据已显着更改的对象。

当数据没有变化时,在表/分区上收集统计信息毫无意义。