调整SET_TABLE_PREFS,按照表来单独设置,减低stale的百分比,比如变化1%就收集统计信息
调整 ESTIMATE_PERCENT的比例,不用AUTO_SAMPLE_SIZE,而用更低的采样比例
High-frequency Optimizer Statistics Collection
自定义搜集统计信息的job,设置自定义的time interval
Real-time Statistics
19c有实时统计信息,在display_cursor中可以看到 – dynamic statistics used: statistics for conventional DML
配置参数:optimizer_real_time_statistics ,21c的参数backport到19c RU 10
分区表:
用Incremental Statistics,注意时长场景,时间窗口移动。
“Out of Range” 场景:
在range 分区表中比较常见,应对方法:DBMS_STATS.COPY_TABLE_STATS(注意,临时解决方案,还是需要搜集详细统计信息)
另外,还可以通过分析数据增长或者变化的趋势,手动设置统计信息:DBMS_STATS.SET_COLUMN_STATS
GATHERING STATISTICS MORE QUICKLY
Using Parallelism
大对象的并发度指定:PARALLEL_THREADS_PER_CPU X CPU_COUNT
开启concurrent,多个表,多个分区一起搜集。concurrent的并行度取决于JOB_QUEUE_PROCESSES的参数,ERP可能默认禁用,因为ERP部署要求设置参数_optimizer_autostats_job=false
变动快的表:
/*+ dynamic_sampling(2) */
或者set OPTIMIZER_ADAPTIVE_FEATURES = TRUE 并且set OPTIMIZER_DYNAMIC_SAMPLING = 2 (12c中)
GTT表:
19c可以在不同session设置共享统计信息(优先使用本session的,如果本session没有,则尝试看是否有共享的GTT统计信息)
online statistics gathering:
12c之后,当DBMS_STATS.GATHER_TABLE_STATS的 options => ‘GATHER AUTO’时,在bulk load和direct load中,会自动搜集
固定统计信息:
DBMS_STATS.GATHER_FIXED_OBJECTS_STATS
可以使用优化器统计信息顾问(Optimizer Statistics Advisor)监控和分析统计信息收集任务。该工具可以帮助识别和纠正统计信息收集中的问题,确保统计信息的准确性和及时性。
参考: 《Best Practices for Gathering Optimizer Statistics with Oracle Database 19c》