一、如何性能调优
1、设置性能预期
可以接受的查询时间,每分钟的查询数等等;
基准线(Benchmarks)
2、了解当前系统的基本的硬件性能
I/O:磁盘吞吐量,容量、CUP、内存、网络;
3、了解当前系统的负载
时间窗口是否满足当前应用?
跑批、查询、其他用户的访问等等;
资源竞争?
几个用户同时提交几个打的命令 等;
数据竞争?
数据并发的访问、同时的查询等;
4、指定优化方案
二、常见的性能问题
硬件问题/失败的实例;
资源分配和竞争;
不精确的数据统计:在GP当中我们的查询是非常依赖统计的,如果没有一个合适的统计,我们就不能生产一个合适的查询计划;
不均衡的数据分布;
数据库设计:表设计、索引设计等等;
SQL规划;
1、硬件问题/失败的实例
注:剩下的30%是给我们留余地,比如清理、扩容等;
max_fsm_relations>这三个对象加起来的数,这样才不会超过空闲空间映射;
2、资源分配和竞争
(1)资源队列
在系统中限制活动的查询;
限制特定用户查询的能力(成本、优先级、内存)
(2)在低使用时间进行管理工作
Data loading、ETL、VACCUM、ANALYZE、Backups
(3)合理规划时间窗口来避免锁冲突
避免并发的会话在同一时间更新相同的数据;
(4)资源相关的配置参数
work_mean=32M(当我们有排序的时候我们会用到这个空间)
maintenance_work_mean=64M(维护的工作内存)
shared_buffers=125M
三、数据库统计(ANALYZE)
1、查询计划依赖统计信息生成
2、在下列数据库操作结束后执行ANALYZE:
数据装载、从备份中恢复、模式中的改变(添加索引等)、插入更新或者删除数据;
3、配置统计信息的收集
default_statistics_target=25
gp_analyze_relative_error=0.25(分析允许25%的错误)
很对特定的列:ALTER TABLE table ALTER id SET STATISTICS 6 ;
针对外部表:update pg_class set reltuples=500000, relpages=150 where relname=' external_table ' ;
四、数据分布
1、表数据分布要考虑的几个方面
2、检查数据偏斜情况
3、重新平衡表数据
五、数据库设计
1、数据类型的选择
2、非标准化(星型模型)
注:星型模型是又事实表+维度表:事实表为中心,维度表发散;
3、表分区
六、常见的性能问题
1、数据库设计-索引
在GP中很少用索引(GP用的是随机寻址);
先测试五索引的性能;
可以增加OLTP类型工作负载的性能;
其他使用索引考虑的方面:
配置索引使用:enable_indexscan=on | off(如果索引真的有用可以设置为on)
show enable_indexscan;(可查看)
七、SQL规划
1、一般考虑的方面
了解你的数据
最小化返回的数据
避免不必要的列/表在结果集中
避免大的排序
在表连接是匹配数据类型
2、GP特殊的考虑
尽量使用分布键进行关联查询
考虑数据分布策略
八、跟踪性能问题
1、系统数据字典表和视图
pg_stat_activity
pg_locks/pg_class(需要通过id关联)
2、查询计划
3、数据库日志
4、UNIX系统工具(gpssh)
调用监控工具如:ps、top、iostat、vmstat、netstat等
标签:11,GP,性能,查询,索引,调优,数据库 From: https://www.cnblogs.com/xiao-wang-tong-xue/p/16874449.html