使用下面的块收集模式统计数据花费了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 db是11.2.0版本,模式中有几个大的分区表,数据插入/删除经常发生。
发布于 2019-01-12 19:28:09
考虑一个额外的参数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;
/发布于 2019-01-12 22:01:26
是否始终需要重新计算整个架构的统计数据?您还可以对单个表或仅对分区,甚至对单个列执行集统计。将数据收集状态限制为数据已更改的对象( significantly. )
当数据没有变化时,在表/分区上收集统计数据是没有任何意义的。
https://stackoverflow.com/questions/54159145
复制相似问题