我有一个大表,有2100个分区。每天都有数据被加载到这个表中,但是我不知道数据将被加载到哪个分区。但是,平均每天大约有6-7个分区接收数据。
我正在尝试获取这张table的增量统计数据。但是,Oracle始终收集表的所有分区上的统计信息。预期的行为是Oracle仅收集数据已更改的分区上的统计信息。
此外,当我试图在不执行任何操作的情况下收集同一个表的统计信息时,它仍然会收集所有分区的统计信息,即使没有数据加载。
我有其他类似的表,没有问题。此行为仅适用于一个表。下面,我将分享我为此表配置的一些参数以及我如何收集统计数据。我是否应该调查另一个参数来防止这种行为?或者,为什么Oracle会表现出这种行为?
APPROXIMATE_NDV_ALGORITHM ->HYPERLOGLOG
INCREMENTAL_STALENESS ->USE_STALE_PERCENT
GRANULARITY ->PARTITION
INCREMENTAL ->TRUE
PUBLISH ->TRUE
dbms_stats.gather_table_stats
(
ownname => 'TABLE_OWNER',
tabname => 'TABLE_NAME',
estimate_percent => 1,
degree => 32
);
1条答案
按热度按时间1cklez4t1#
我发现必须设置以下内容才能使增量统计数据发挥作用:
把你搞糊涂的关键可能是
granularity
和estimate_percent
。这些必须是AUTO
,因为Oracle将在表级别收集一次,然后根据需要收集分区,并且它必须能够自己做出这个决定。Oracle越来越多地要求这两者都是AUTO
,以实现高级统计信息收集功能。您应该使用dbms_stats.set_table_prefs
在表级别设置这些参数,然后在调用gathering时,除了标识表之外,不提供任何选项。