Oracle 19c增量统计异常行为

5vf7fwbs  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(133)

我有一个大表,有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
                            );
1cklez4t

1cklez4t1#

我发现必须设置以下内容才能使增量统计数据发挥作用:

GRANULARITY => 'AUTO'
INCREMENTAL => TRUE
PUBLISH => TRUE
ESTIMATE_PERCENT => DBMS_STATS.AUTO_SAMPLE_SIZE
APPROXIMATE_NDV_ALGORITHM => 'HYPERLOGLOG'
INCREMENTAL_LEVEL => 'PARTITION'

把你搞糊涂的关键可能是granularityestimate_percent。这些必须是AUTO,因为Oracle将在表级别收集一次,然后根据需要收集分区,并且它必须能够自己做出这个决定。Oracle越来越多地要求这两者都是AUTO,以实现高级统计信息收集功能。您应该使用dbms_stats.set_table_prefs在表级别设置这些参数,然后在调用gathering时,除了标识表之外,不提供任何选项。

相关问题