postgresql脚本性能优化
总结一下这段时间在编写PG脚本过程中遇到的性能问题,记录几个主要的脚本性能优化方法,现在记录的可能不完整,后续再陆续补充。
脚本性能问题排查方法
在编写脚本的第一阶段,主要考虑的是功能的实现,并未考虑性能问题,所以刚完成的脚本多多少少都会有性能的问题。
在这里,先介绍下我在性能优化过程中排查耗时点的方法,主要理念是先整体,再细分,逐层剥离的方法。
- 排查方法
1,分析整个脚本的主要功能点,并划分成若敢干个功能块。
2,把这若干个功能块分为若干步骤,对每个步骤增加耗时的日志记录。
3,找出耗时较多的步骤,逐个分析耗时原因。分析耗时多的步骤中的SQL语句,单独执行各个语句,确定耗时多的几条语句。
4,剥离出这些语句单独执行,并输出执行计划,根据执行计划确定性能差的原因。
5,找到原因,针对性的进行优化。
优化方法
索引
确保带条件的查询语句都能走索引。根据查询语句的执行计划分析查询是全表扫描还是索引扫描。
执行计划相关说明参考PG执行计划.索引字段
避免在查询条件中,对索引字段使用聚合函数(函数索引除外),对索引字段使用聚合函数会导致无法正常通过索引查询,严重影响查询性能。
比如有如下查询语句,从test表中查询2016年6月1号到5号的数据,且id=2,data_type=2,test表建立的索引包含字段id,log_time和data_type: