暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL火焰图

alitrack 2021-04-02
1585



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.sql
              EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)
              SELECT id
              FROM 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


                    文章转载自alitrack,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论