PostgreSQL 慢查询SQL跟踪
PostgreSQL 开启慢SQL捕获在排查问题时是个很有效的手段。根据慢SQL让我在工作中真正解决了实际问题,很有帮助。
PostgreSQL 日志支持的输出格式有 stderr(默认)、csvlog 、syslog
一般的错误跟踪,只需在配置文件 【postgresql.conf】简单设置几个参数,当然还有错误级别等要设置。
logging_collector = on log_destination = 'stderr' log_directory = 'log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
SELECT
name,
setting,
vartype,
boot_val,
reset_val
FROM pg_settings where name in('logging_collector','log_destination','log_directory','log_filename');
默认的跟踪日志记录在 pgdate/log 中,如 /usr/local/pgsql/data/log 。
其他几个重要参数说明:
log_rotation_age = 1440 #minute,多长时间创建新的文件记录日志。0 表示禁扩展。 log_rotation_size = 10240 #kb,文件多大后创建新的文件记录日志。0 表示禁扩展。 log_truncate_on_rotation = on #可重用同名日志文件
当需要跟踪SQL语句或者慢语句,得需要设置以下参数:
log_statement = all #需设置跟踪所有语句,否则只能跟踪出错信息 log_min_duration_statement = 5000 #milliseconds,记录执行5秒及以上的语句
log_statement:
设置跟踪的语句类型,有4种类型:none(默认), ddl, mod, all。跟踪所有语句时可设置为 "all"。
log_min_duration_statement:
跟踪慢查询语句,单位为毫秒。如设置 5000,表示日志将记录执行5秒以上的SQL语句。
当 log_statement=all 和 log_min_duration_statement 同时设置时,将跟踪所有语句,忽略log_min_duration_statement 设置。所以需按情况设置其中一个或两个值。
加载配置
select pg_reload_conf(); show log_min_duration_statement;
针对某个用户或者某数据库进行设置
alter database test set log_min_duration_statement=5000;
捕获正在查询的慢SQL
select * from pg_stat_activity where state<>'idle' and now()-query_start > interval '5 s' order by query_start ;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了