使用
EXPLAIN
执行以下语句,可获得SQL的查询计划。具体语法示例如下:
EXPLAIN [ ( option [, ...] ) ] statement
EXPLAIN [ ANALYZE ] [ VERBOSE ] statement
where option can be one of:
ANALYZE [ boolean ]
VERBOSE [ boolean ]
COSTS [ boolean ]
BUFFERS [ boolean ]
FORMAT { TEXT | XML | JSON | YAML }
上述示例对应的命令参数选项含义如下:
ANALYZE
会实际执行SQL,并获得相应的查询计划,默认为FALSE。如果优化一些修改数据的SQL 需要真实的执行但是不能影响现有的数据,可以放在一个事务中,分析完成后可以直接回滚。
VERBOSE
会显示查询计划的附加信息,默认为FALSE。附加信息包括查询计划中每个节点输出的列(Output),表的SCHEMA信息,函数的SCHEMA 信息,表达式中列所属表的别名,被触发的触发器名称等。
COSTS
会显示每个计划节点的预估启动代价(找到第一个符合条件的结果的代价)和总代价,以及预估行数和每行宽度,默认为TRUE。
BUFFERS
会显示关于缓存的使用信息,默认为FALSE。该参数只能与ANALYZE 参数一起使用。缓冲区信息包括共享块(常规表或者索引块)、本地块(临时表或者索引块)和临时块(排序或者哈希等涉及到的短期存在的数据块)的命中块数,更新块数,挤出块数。
FORMAT
指定输出格式,默认为TEXT。各个格式输出的内容都是相同的,其中XML | JSON | YAML更有利于您通过程序解析SQL语句的查询计划。
可以通过观察视图
pg_stat_statements
和
polar_stat_sql
进行分析SQL执行需占用的资源情况,这两个视图需创建相关插件,并打开开关。
CREATE EXTENSION pg_stat_statements;
CREATE EXTENSION polar_stat_sql;
postgres=# alter system set polar_stat_sql.enable_stat=on;
ALTER SYSTEM
postgres=# alter system set polar_stat_sql.enable_qps_monitor=on;
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
(1 row)