
Postgres Explain Analyze
PostgreSQL 查询调优清单里提到了Explain。
EXPLAIN命令显示语句的执行计划,并且基于有关表的统计信息。永远记住正确的计划对于取得良好的业绩至关重要。EXPLAIN命令将分解PostgreSQL执行SQL查询的方式,但这更多是一种估计。我们可以在解释计划中使用ANALYZE关键字,该关键字实际上执行查询,然后显示每个计划节点中累积的真实行数和真实运行时间。
Tushar Ahuja,公众号:alitrackPostgreSQL 查询调优清单
火焰图
火焰图是Brendan Gregg发明的,用于可视化分析软件中每个代码路径的CPU消耗。它们是众多性能调查中非常有用的可视化工具。Flamegraph已用于可视化Oracle数据库查询计划和查询执行,事实证明对于调试慢速数据库查询很有用。
pg_flame
Marcus Gartner 借鉴了火焰图的思想,使用Go语言开发了PostgreSQL Explain Analyze 火焰图。
https://github.com/mgartner/pg_flame
下载安装
作者提供了Linux、macOS的预编译版本以供下载使用,对于macOS用户也可以通过Homebrew安装
$ brew install mgartner/tap/pg_flame
另外Docker也是不错的跨平台选择
$ docker pull mgartner/pg_flame
从代码编译
如果要从源代码构建二进制文件,请运行以下命令。请注意,编译需要Go版本1.13+。
$ git clone https://github.com/mgartner/pg_flame$ cd pg_flame$ go build
将创建一个pg_flame二进制文件,您可以将其放置在$ PATH中。
注:很遗憾,因为作者go.mod及代码里的问题,并不支持下面的安装方式
$ go get -u github.com/mgartner/pg_flame
使用
pg_flame
程序从标准输入(stdin)读取JSON查询计划,并将Flamegraph HTML写入标准输出(stdout)。因此,您可以根据需要通过管道传输和定向输入和输出。
Example: 一步法
$ psql dbname -qAtc 'EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) SELECT id FROM users' \| pg_flame \> flamegraph.html \&& open flamegraph.html
Example: 使用SQL 文件的多步法
创建“ EXPLAIN ANALYZE”查询SQL文件。
-- query.sqlEXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)SELECT idFROM users
然后运行查询并将JSON保存到文件。
$ psql dbname -qAtf query.sql > plan.json
最后,生成火焰图 HTML。
$ cat plan.json | pg_flame > flamegraph.html
Example: Docker
如果您已按照上述Docker安装步骤进行操作,则可以将查询计划JSON通过管道传输到容器并保存输出HTML。
$ psql dbname -qAtc 'EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) SELECT id FROM users' \| docker run -i pg_flame \> flamegraph.html




