GreenPlum教程FG032-GreenPlum统计信息更新实战
本文档风哥主要介绍GreenPlum统计信息更新,包括统计信息概念、统计信息内容、统计信息最佳实践、ANALYZE实战、自动统计信息收集、统计信息案例等内容,风哥教程参考GreenPlum官方文档Administrator Guide、Statistics等内容编写,适合DBA人员在学习和测试中使用。
Part01-基础概念与理论知识
1.1 GreenPlum统计信息概念
统计信息是优化器生成执行计划的重要依据,准确的统计信息可以生成最优的执行计划。更多视频教程www.fgedu.net.cn
1.1.1 统计信息作用
1. 优化执行计划
– 选择最优访问路径
– 选择最优连接方式
– 选择最优连接顺序
– 评估操作成本
2. 提高查询性能
– 减少查询时间
– 降低资源消耗
– 提高并发能力
– 优化系统性能
3. 数据分布分析
– 数据分布情况
– 数据倾斜识别
– 数据量估算
– 唯一值数量
4. 索引选择
– 索引使用决策
– 索引效率评估
– 索引选择性
– 索引维护
1.2 GreenPlum统计信息内容
统计信息包含表的多种信息,帮助优化器做出正确的决策。学习交流加群风哥微信: itpux-com
1.2.1 统计信息内容
1. 表级统计信息
– 表的行数
– 表的页数
– 表的大小
– 最后分析时间
2. 列级统计信息
– 唯一值数量
– 空值数量
– 最小值
– 最大值
– 数据分布直方图
3. 索引统计信息
– 索引页数
– 索引行数
– 索引选择性
– 索引深度
4. 数据分布统计
– 分布键统计
– 数据倾斜度
– 分区统计
– Segment分布
Part02-生产环境规划与建议
2.1 GreenPlum统计信息最佳实践
- 数据变化后及时更新统计信息
- 定期更新统计信息
- 设置合理的采样率
- 监控统计信息准确性
- 建立自动化更新机制
Part03-生产环境项目实施方案
3.1 GreenPlum ANALYZE实战
3.1.1 手动更新统计信息
$ psql -d fgedudb -U fgedu
psql (9.4.26)
Type “help” for help.
fgedudb=>
# 更新整个表的统计信息
fgedudb=> ANALYZE fgedu.fgedu_sales;
ANALYZE
# 更新特定列的统计信息
fgedudb=> ANALYZE fgedu.fgedu_sales (sale_date, customer_id);
ANALYZE
# 更新整个Schema的统计信息
fgedudb=> ANALYZE fgedu;
ANALYZE
# 更新整个数据库的统计信息
fgedudb=> ANALYZE;
ANALYZE
# 使用VERBOSE选项查看详细信息
fgedudb=> ANALYZE VERBOSE fgedu.fgedu_sales;
INFO: analyzing “fgedu.fgedu_sales”
INFO: “fgedu_sales”: scanned 1000 of 10000 pages, containing 100000 live rows and 0 dead rows; 100000 rows in sample, 1000000 estimated total rows
ANALYZE
学习交流加群风哥QQ113257174
3.1.2 查看统计信息
fgedudb=> SELECT
fgedudb-> schemaname,
fgedudb-> tablename,
fgedudb-> n_live_tup AS row_count,
fgedudb-> n_dead_tup AS dead_rows,
fgedudb-> last_vacuum,
fgedudb-> last_autovacuum,
fgedudb-> last_analyze,
fgedudb-> last_autoanalyze
fgedudb-> FROM pg_stat_user_tables
fgedudb-> WHERE schemaname = ‘fgedu’
fgedudb-> LIMIT 5;
schemaname | tablename | row_count | dead_rows | last_vacuum | last_autovacuum | last_analyze | last_autoanalyze
————+—————+———–+———–+————-+—————–+———————–+———————–
fgedu | fgedu_sales | 1000000 | 0 | | | 2026-04-08 10:00:00 |
(1 row)
# 查看列级统计信息
fgedudb=> SELECT
fgedudb-> attname AS column_name,
fgedudb-> n_distinct,
fgedudb-> null_frac,
fgedudb-> avg_width
fgedudb-> FROM pg_stats
fgedudb-> WHERE schemaname = ‘fgedu’ AND tablename = ‘fgedu_sales’;
column_name | n_distinct | null_frac | avg_width
————-+————+———–+———–
sale_id | -1 | 0 | 8
sale_date | 365 | 0 | 4
customer_id | 10000 | 0 | 4
amount | 0 | 0 | 8
(4 rows)
更多学习教程公众号风哥教程itpux_com
3.2 GreenPlum自动统计信息收集
3.2.1 配置自动收集
fgedudb=> SHOW autovacuum;
autovacuum
————
on
(1 row)
fgedudb=> SHOW autovacuum_analyze_threshold;
autovacuum_analyze_threshold
——————————
50
(1 row)
fgedudb=> SHOW autovacuum_analyze_scale_factor;
autovacuum_analyze_scale_factor
———————————
0.1
(1 row)
# 设置自动收集参数
fgedudb=> ALTER SYSTEM SET autovacuum_analyze_threshold = 100;
ALTER SYSTEM
fgedudb=> ALTER SYSTEM SET autovacuum_analyze_scale_factor = 0.05;
ALTER SYSTEM
# 重载配置
fgedudb=> SELECT pg_reload_conf();
pg_reload_conf
—————-
t
(1 row)
from GreenPlum视频:www.itpux.com
Part04-生产案例与实战讲解
4.1 GreenPlum统计信息案例
4.1.1 统计信息过期导致性能问题
# 1. 检查统计信息
SELECT
schemaname,
tablename,
n_live_tup,
last_analyze
FROM pg_stat_user_tables
WHERE schemaname = ‘fgedu’ AND tablename = ‘fgedu_sales’;
# 发现:last_analyze是一个月前,但数据量增加了10倍
# 2. 更新统计信息
ANALYZE VERBOSE fgedu.fgedu_sales;
# 3. 查看执行计划变化
EXPLAIN SELECT * FROM fgedu.fgedu_sales WHERE sale_date = ‘2026-04-08’;
# 优化前:使用全表扫描
# 优化后:使用索引扫描
# 4. 性能对比
# 优化前:10秒
# 优化后:0.1秒
# 性能提升100倍
Part05-风哥经验总结与分享
5.1 GreenPlum统计信息技巧
1. 更新时机
– 数据加载后
– 大量数据更新后
– 创建索引后
– 查询性能下降时
2. 更新策略
– 小表:全量分析
– 大表:采样分析
– 热点表:频繁更新
– 冷数据表:定期更新
3. 采样设置
– default_statistics_target
– 采样率设置
– 直方图桶数
– 统计精度
4. 监控维护
– 监控统计信息时间
– 监控统计信息准确性
– 定期更新统计信息
– 建立自动化机制
5. 最佳实践
– 建立更新计划
– 自动化更新流程
– 监控查询性能
– 定期优化调整
本文档介绍了GreenPlum统计信息更新的核心内容,包括ANALYZE实战、自动统计信息收集、统计信息案例等,希望对大家有所帮助。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
