PostgreSQL

关注公众号 jb51net

关闭
首页 > 数据库 > PostgreSQL > PostgreSQL auto_explain

PostgreSQL auto_explain的具体使用

作者:脑子进水养啥鱼?

PostgreSQL auto_explain插件自动记录慢SQL执行计划,支持全局、会话及用户级别加载,具有一定的参考价值,感兴趣的可以了解一下

一、概述

auto_explain 插件可以实现在数据库日志中自动记录慢 SQL 执行计划。PostgreSQL 编译安装时使用了 make world & make install-world 命令,则所有内置插件(包括 auto_explain)会默认被安装到数据库中,可直接调用。在 PostgreSQL 中执行 LOAD 'auto_explain'; 若无报错则表明插件已存在。PostgreSQL 主流稳定版本 9.x 及以上均已支持。

二、使用

2.1 session_preload_libraries 调用(用户级别)

--调用
ALTER ROLE u1 SET session_preload_libraries = 'auto_explain';
ALTER ROLE u1 SET auto_explain.log_min_duration = '3s';

--u1 用户新连入数据库的会话,执行超3s的sql将在数据库日志中打印执行计划
2025-05-27 14:01:10.821 CST [3335] LOG:  duration: 4004.207 ms  plan:
        Query Text: SELECT pg_sleep(4);
        Result  (cost=0.00..0.01 rows=1 width=4)

--取消调用
ALTER ROLE u1 set session_preload_libraries = default;
ALTER ROLE u1 set session_preload_libraries = default;

2.2 LOAD 调用(会话级别)

--调用
LOAD 'auto_explain';
set auto_explain.log_min_duration = '3s';

--当前会话,执行超3s的sql将在数据库日志中打印执行计划
2025-05-27 14:15:03.547 CST [3581] LOG:  duration: 4004.732 ms  plan:
        Query Text: SELECT pg_sleep(4);
        Result  (cost=0.00..0.01 rows=1 width=4)

--取消调用
临时调用,退出当前会话即可。

2.3 shared_preload_libraries 调用(全局级别)

--调用(若未配置环境变量$PGDATA替换为postgresql.conf所在实际路径)
cat >> $PGDATA/postgresql.conf << 'eof'
shared_preload_libraries = 'auto_explain'
auto_explain.log_min_duration = '3s'
eof

psql postgres postgres -c 'checkpoint'
pg_ctl restart

--新连入数据库的会话,执行超3s的sql将在数据库日志中打印执行计划
2025-05-27 14:25:30.559 CST [3884] LOG:  duration: 5005.176 ms  plan:
        Query Text: SELECT pg_sleep(5);
        Result  (cost=0.00..0.01 rows=1 width=4)

--取消调用
sed -i '/^shared_preload_libraries = '\''auto_explain'\''/d' $PGDATA/postgresql.conf
sed -i '/^auto_explain.log_min_duration = '\''3s'\''/d' $PGDATA/postgresql.conf

psql postgres postgres -c 'checkpoint'
pg_ctl restart

三、对比

方式生效范围是否需要重启灵活性适用场景主要缺点
shared_preload_libraries全局长期全局监控需重启,可能资源浪费
LOAD当前会话临时调试手动操作,无法自动化
session_preload_libraries新会话按会话/用户自动启用仅对新会话生效,参数限制

生产环境长期监控:优先使用 shared_preload_libraries,全局配置过滤条件(如 log_min_duration)减少日志量。
临时诊断:使用 LOAD 命令,灵活且不影响其他会话。
特定用户/应用分析:使用 session_preload_libraries,通过连接参数或角色配置实现按需加载。

四、其他参数介绍

详情参考官网:https://www.postgresql.org/docs/current/auto-explain.html

到此这篇关于PostgreSQL auto_explain的文章就介绍到这了,更多相关PostgreSQL auto_explain内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文