当前位置: 首页 > news >正文

Docker部署的PostgreSQL慢查询日志配置指南

目录

1. 核心步骤

1.1 修改配置文件

1.2 动态加载配置(无需重启容器)

1.3 验证配置生效

1.3.1 查看参数

1.3.2 执行测试慢查询

2. 高级用法

2.1 使用分析工具

2.2 启用扩展

3. 注意事项

3.1 日志目录权限

3.2  性能影响


配置Docker部署的PostgreSQL记录慢查询日志,需通过修改配置文件核心参数实现。以下是完整步骤及注意事项,适用于PostgreSQL 10+版本:

1. 核心步骤

1.1 修改配置文件
  • 进入容器
docker exec -it <容器名或ID> bash  
  • 编辑配置文件(通常位于 /var/lib/postgresql/data/postgresql.conf):
vim  /var/lib/postgresql/data/postgresql.conf  
  • 添加或修改以下参数:
#慢查询阈值(单位:毫秒);记录超过10000ms(10秒)的查询  
log_min_duration_statement = 10000  #日志记录格式(增强可读性);时间戳、进程ID、用户、数据库名  
log_line_prefix = '%m [%p] %u@%d '  #确保日志输出到标准输出
log_destination = 'stderr'  #启动日志收集功能,将日志写入文件
logging_collector = on  #【可选】自定义日志目录
log_directory = '/var/log/postgresql'  #【可选】自定义日志文件[可选]
log_filename = 'postgresql-%a.log'  #【可选】记录连接/断开事件(辅助定位慢查询上下文)
log_connections = on
log_disconnections = on#【可选】记录锁等待(辅助分析锁竞争)
log_lock_waits = on#【可选】日志文件命名格式(按日期时间切割)
log_filename = 'postgresql-%Y%m%d_%H%M%S.log'#【高级用法】日志自动切割策略(每天切割一次,或 1GB 切割)
log_rotation_age = '1d'
log_rotation_size = '1GB'#【高级用法】仅对特定数据库/用户启用慢日志
# 对数据库 'lmzf_db' 设置5000ms阈值  
ALTER DATABASE lmzf_db SET log_min_duration_statement = 5000;  
1.2 动态加载配置(无需重启容器)
# 在容器内执行  
su - postgres  
pg_ctl reload -D /var/lib/postgresql/data  

或在宿主机执行:

docker exec <容器名> su - postgres -c 'pg_ctl reload'  
1.3 验证配置生效
1.3.1 查看参数

  SHOW log_min_duration_statement;

docker exec <容器名> psql -U postgres -c "SHOW log_min_duration_statement;"  
1.3.2 执行测试慢查询

  SELECT pg_sleep(12); 

docker exec <容器名> psql -U postgres -c "SELECT pg_sleep(12);"  

观察日志文件是否生成记录。

2. 高级用法

2.1 使用分析工具

         可以使用第三方工具如 pgBadger 对慢查询日志进行分析,生成详细的性能报告,帮助识别性能瓶颈。安装 pgBadger 后,运行以下命令生成报告: 

pgbadger    /path/to/postgresql.log
2.2 启用扩展

pg_stat_statements 是 PostgreSQL 内置的统计扩展,可记录 SQL 的执行次数、总耗时等详细信息(比日志更轻量)。启用步骤:

-- 1. 在 postgresql.conf 中启用扩展
shared_preload_libraries = 'pg_stat_statements'  # 添加到该行-- 2. 重启 PostgreSQL 服务
pg_ctl restart -D /path/to/postgresql/data-- 3. 创建扩展
CREATE EXTENSION pg_stat_statements;-- 4. 查询慢 SQL 统计(按总耗时排序)
SELECT query, total_time, calls, mean_time 
FROM pg_stat_statements 
ORDER BY total_time DESC 
LIMIT 10;

3. 注意事项

3.1 日志目录权限

        若自定义路径,需提前在 Docker 挂载卷中创建目录并赋予 postgres 用户写权限。

3.2  性能影响

        过低的阈值(如 100ms 以下)可能增大 I/O 负载,建议根据业务压力逐步调整。

http://www.lryc.cn/news/606324.html

相关文章:

  • pytorch的自定义 CUDA 扩展怎么学习
  • pytorch程序语句固定开销分析
  • 排序算法-选择排序(选择排序、堆排序)(动图演示)
  • Next实习项目总结串联讲解(一)
  • 基于京东评论的文本挖掘与分析,使用LSTM情感分析算法以及网络语义分析
  • 正则化都是放在模型的哪个位置呢?
  • 案例开发 - 日程管理 - 第四期
  • 【C语言学习】scanf函数
  • 【源力觉醒 创作者计划】文心一言与deepseek集成springboot开发哪个更方便
  • 3.Linux 系统文件类型与文件权限
  • AI与AGI:从狭义智能到通用智能
  • 上证50期权2400是什么意思?
  • 性能测试篇 :Jmeter监控服务器性能
  • virtualbox+UBuntu20.04+内存磁盘扩容
  • 知识随记-----使用现代C++客户端库redis-plus-plus实现redis池缓解高并发
  • 逻辑回归的应用
  • JVM学习日记(十二)Day12
  • 8K、AI、低空智联,H.266能否撑起下一代视频通路?
  • vue 开发总结:从安装到第一个交互页面-与数据库API
  • 逻辑回归详解:从数学原理到实际应用
  • 三坐标测量仪攻克深孔检测!破解新能源汽车阀体阀孔测量难题
  • MySQL 8.0 OCP 1Z0-908 题目解析(39)
  • Verilog与SytemVerilog差别
  • 文法中的间接左递归
  • 行业热点丨仿真历史数据难以使用?如何利用几何深度学习破局,加速汽车工程创新
  • 【BUUCTF系列】[HCTF 2018]WarmUp1
  • 第15届蓝桥杯C++青少组中级组选拔赛(STEMA)2024年3月10日真题
  • 大模型流式长链接场景下 k8s 优雅退出 JAVA
  • 永磁同步电机无速度算法--直流误差抑制自适应二阶反推观测器
  • 公路坑槽检测分析原理和思路