作者:Tushar Ahuja
原文:PostgreSQL query tuning checklist
网址: https://www.enterprisedb.com/postgres-tutorials/postgresql-query-tuning-checklist
本文提供了可用于改善PostgreSQL查询性能的工具清单。
EXPLAIN
VACUUM
ANALYZE
Database indexes
auto_explain module
pg_stat_statements
Logging
pgBadger
PostgreSQL configuration parameters
在本文中,我们将学习如何改进PostgreSQL查询。性能是最终用户最重要的因素之一。没有人愿意等待10分钟以获得SELECT查询的结果。
没有改进PostgreSQL查询的固定公式,因为查询性能会受到很多因素的影响,例如系统的硬件(RAM,CPU,磁盘类型,磁盘配置)。
这是一份清单(或提示),这些清单是我们应该用来分析工作负载或运行缓慢的查询的地方。
性能是一个非常广泛的主题,因此建议您参考该主题的官方在线PostgreSQL文档:http://postgres.cn/docs/12/performance-tips.html。
1. EXPLAIN
EXPLAIN命令显示语句的执行计划,并且基于有关表的统计信息。永远记住正确的计划对于取得良好的业绩至关重要。EXPLAIN命令将分解PostgreSQL执行SQL查询的方式,但这更多是一种估计。我们可以在解释计划中使用ANALYZE关键字,该关键字实际上执行查询,然后显示每个计划节点中累积的真实行数和真实运行时间。
2. VACUUM
VACUUM命令基本上删除由更新删除或过时但未从表中物理删除的元组。这对避免腹胀很有帮助。最好使用VACUUM分析关键字。
有关更多详细信息,请参考PostgreSQL文档:http://postgres.cn/docs/12/sql-vacuum.html。
3. ANALYZE
ANALYZE收集有关数据库中表内容的统计信息,这有助于查询计划者找到最有效的查询执行计划。
有关更多详细信息,请参考PostgreSQL文档:http://postgres.cn/docs/12/sql-analyze.html。
4. Database Indexes数据库索引
始终建议在表上创建索引。否则,PostgreSQL将执行全表扫描,这会使执行查询非常缓慢。
PostgreSQL中可用的索引类型为B树(默认索引),哈希,GiST,SP-GiST和GIN。当表具有主键/唯一键时,PostgreSQL将创建隐式索引。
另外,我们应尽量避免在表上创建未使用或不必要的索引,因为它们也可能影响性能。
我们还可以使用REINDEX命令修复无法使用的索引或索引膨胀时。
有关更多详细信息,请参考PostgreSQL文档:http://postgres.cn/docs/12/sql-createindex.html。
5. auto_explain module
auto_explain模块用于自动记录慢速语句的执行计划。
有关更多详细信息,请参考PostgreSQL文档:
6. pg_stat_statements
pg_stat_statements模块用于跟踪SQL语句的执行统计信息,以识别缓慢的查询。
有关更多详细信息,请参考PostgreSQL文档:http://postgres.cn/docs/12/pgstatstatements.html。
7. Logging
log_min_duration_statement (integer) 有助于跟踪未优化的查询。
8. pgBadger
pgBadger是一个开源工具,可以生成有关数据库服务器活动的详细报告,包括临时文件,慢速查询等。可以从此处下载:https://pgbadger.darold.net/
9. PostgreSQL configuration parameters
我们可能会使用某些PostgreSQL配置参数,可以对其进行更改以获得更好的性能。为此,我们需要编辑postgresql.conf文件,该文件位于安装的$data 目录下。我们可以配置的参数包括max_connections,checkpoint_segments,work_mem和random_page_cost。
有关更多详细信息,请参考PostgreSQL文档:
http://postgres.cn/docs/12/runtime-config-resource.html
http://postgres.cn/docs/12/runtime-config-query.html
另外参数配置方面,有个不错的工具可供借鉴,不会PostgreSQL调优?这款开源工具送给你
每个知识点如果展开都会很长,如果想快速解决问题,还有两个办法:
向专业人士寻求帮助
参加专业的培训,比如中国PostgreSQL DBA认证培训,里面的老师都是这领域的专家
如果需要,可以和我联系,不论是引荐专家还是介绍中国PostgreSQL DBA认证培训。