介绍
pg_show_plans是一个显示当前运行的所有SQL语句执行计划的模块。它在plan结束位置,截获并存储当前plan tree,从而使其他会话可以打印存储plan tree。目前此模块支持从9.5到14的PostgreSQL版本。它会在共享内存上创建一个哈希表,以便临时存储查询计划。哈希表大小不能更改,因此如果哈希表已满,则不会存储计划。
git地址:GitHub - cybertec-postgresql/pg_show_plans: Show query plans of all currently running SQL statements
安装步骤
以ubuntu22+postgresql14为例
root$ cd /usr/share/postgresql/14/contrib/
root$ git clone https://github.com/cybertec-postgresql/pg_show_plans.git
root$ cd pg_show_plans
root$ export USE_PGXS=1 ##ubuntu系统需要
root$ make && make install
su - postgres
vi /etc/postgresql/14/main/postgresql.conf
# 修改shared_preload_libraries = 'pg_show_plans'如果有多个插件用逗号隔开
# 还可以加入下列专用参数
# pg_show_plans.enable 是否可以显示计划。
# pg_show_plans.plan_format 它控制查询计划的输出格式。可以选择文本或JSON。默认为文本。
# pg_show_plans.max_plan_length 它设置查询计划的最大长度。默认值为8192[字节]。此参数必须设置为整数
pg_ctl restart
psql
CREATE EXTENSION pg_show_plans;
\d pg_show_plans
使用方法示例:
su - postgres
psql
# 执行要监控的SQL语句之后,查看执行计划视图
SELECT * FROM pg_show_plans;
执行计划展示(这里会看到所有正在运行SQL的执行计划)
Name |Value |
------+---------------------------------------------------------------------+
pid |15327 |
level |0 |
userid|10 |
dbid |13761 |
plan |Function Scan on pg_show_plans (cost=0.00..10.00 rows=1000 width=56)|