使用以下代码块收集架构统计信息花费了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版,架构中有一些大的分区表,其中频繁发生数据插入/删除。
答案 0 :(得分:0)
考虑一个附加参数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;
/
答案 1 :(得分:0)
您是否需要始终重新计算整个架构的统计信息?您还可以对单个表或分区甚至单个列执行收集统计信息。将收集统计信息限制为数据已显着更改的对象。
当数据没有变化时,在表/分区上收集统计信息毫无意义。