数据仓库服务 GAUSSDB(DWS)-更新统计信息:基本规则

时间:2025-03-05 09:29:07

基本规则

表1 统计信息收集相关基础功能

功能

介绍

特点

约束

手动采样

作业中修改大量数据后,手动执行ANALYZE

  • normal模式,统计信息存系统表,全局共享。四级锁,同一张表不能并发。
  • light模式,统计信息存内存,全局共享。一级锁,同一张表可以并发。
  • force模式,在锁定统计信息情况下,也可以强制采样,行为与normal一致。

语法:ANALYZE tablename; ANALYZE (light|force) tablename;

-

轮询采样

后台线程,根据阈值

轮询维护统计信息

仅支持normal模式,统计信息存系统表,共享。四级锁,同一张表不能并发

相关GUC参数:

  • autovacuum
  • autovacuum_mode
  • autovacuum_analyze_threshold
  • autovacuum_analyze_scale_factor

异步轮询触发

动态采样

查询解析时,根据阈值,用几十秒的代价

实时维护统计信息

  • normal模式,统计信息存系统表,全局共享。四级锁,同一张表不能并发
  • light模式,统计信息存内存,全局共享。一级锁,同一张表可以并发

相关GUC参数:

  • autoanalyze
  • autoanalyze_mode

随查询实时触发

轻量化时依赖轮询采样进行持久化

强制采样

SQL中通过hint,强制每次查询都收集统计信息

用于数据特征敏感场景,确保查询时统计信息实时最新。

用法:select /*+ lightanalyze (t1 1) */ from t1; 1:强制采样,0:禁止采样

需要改SQL

分区统计信息

按分区收集,仅收增量,自动合并全局信息

用于超大分区表的场景,确保分区剪枝后的查询代价估算准确

多占存储,信息更准

多列统计信息

根据多个列组合收集统计信息

用于多列同时过滤场景,确保对多列组合的查询代价估算准确

手动识别,临时表方式

表达式统计信息

根据表达式函数对某列收集统计信息

用于批量的表达式过滤的场景,确保查询表达式的查询代价估算准确

手动识别

表达式索引信息

创建的表达式索引会自动收集统计信息

用于点查的表达式过滤的场景,确保查询表达式的查询代价估算准确

手动识别

冻结统计信息

将表级的统计信息冻结,防止发生变化

用于数据特征极稳定场景,禁止采样,防止查询计划跳变

用于数据特征极易变场景,强制采样,确保每次查询都采样

参数:表级属性analyze_mode

-

修改统计信息

手动计算后,直接修改统计信息

继续低采样率,但可以手动计算后进行校准。用法:

select approx_count_distinct(col_name) from table_name;

alter table set (n_distinct=xxx)

-

分区信息拷贝

可将旧分区的统计信息拷贝到新分区

用于数据特征变化不大的分区表,减少统计信息收集的开销

-

统计信息推理

基于旧的统计信息自动推算更准确的统计信息

通过GUC参数enable_extrapolation_stats设置。

-

统计信息备份恢复

通过explain (stat on) 将统计信息备份成SQL

用于场景复现或统计信息还原

导出SQL的形式

support.huaweicloud.com/devg-910-dws/dws_04_0436.html