11_性能调优_如何调优_性能问题_跟踪问题_SQL规划
一、如何性能调优
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等
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构