gauss 统计信息收集方式

gauss 统计信息收集方式
最新回答
有你委屈也是欢乐的

2026-04-22 06:07:32

GaussDB(包括GaussDB(DWS))的统计信息收集方式主要包括手动采样、轮询采样、动态采样三种核心模式,并辅以触发条件、特殊场景处理等机制保障数据准确性。

一、核心收集方式
  1. 手动采样用户通过显式执行ANALYZE命令主动触发统计信息更新,适用于需要即时获取最新数据的场景。例如,在批量数据加载后手动执行ANALYZE tablename以更新表统计信息。

  2. 轮询采样由autovacuum后台线程定期发起ANALYZE操作,将统计信息持久化至系统表(如pg_class、pg_statistic)。该方式使用四级锁,对系统性能影响较小,但更新频率较低,不追求实时性。

  3. 动态采样

    前台动态采样:查询优化器在执行计划生成阶段触发实时统计信息收集,数据存储于内存(含淘汰机制),使用一级锁,适用于高实时性场景(如金融交易)。

    后台动态采样:与轮询采样结合,通过autovacuum_mode参数控制(如设置为mix或analyze),在后台线程中补充动态采样逻辑。

二、触发条件与机制
  1. 自动触发条件

    表无统计信息时首次查询自动触发。

    表数据修改量超过阈值(默认50 + 表大小 × 10%)时触发更新。

  2. 修改计数机制

    DML(INSERT/UPDATE/DELETE)和DDL(如TRUNCATE TABLE)操作会累加修改计数。

    跨CN节点通过异步广播(修改计数达2/3或每增10%)和实时广播(单SQL修改超过tuple_change_sync_threshold默认1万条)保证全局一致性。

三、特殊场景处理
  1. 小表优化若数据变化量<10%但数据特征变化显著(如分布偏移),需调低阈值参数以强制自动收集。

  2. 实时性要求高的场景调整采样大小参数后,需手动执行ANALYZE确保统计信息及时更新。

  3. 外表和冷热表因访问性能限制,此类表不支持自动收集,需通过ANALYZE命令手动触发。

四、高级功能
  1. 多列统计信息对存在相关性的多列(如column1和column2),可通过ANALYZE tablename ((column1, column2))直接收集,或通过ALTER TABLE tablename ADD STATISTICS ((column1, column2))声明后在下一次ANALYZE时自动收集。

  2. 全局二级索引需先对基表执行ANALYZE,再对索引执行ANALYZE GLOBAL INDEX indexname FOR TABLE tablename以更新索引统计信息。

统计信息作为优化器生成执行计划的基础数据,其准确性直接影响查询性能,需根据业务场景选择合适的收集策略。