在PostgreSQL中,跟踪和分析查询日志是排查性能瓶颈的重要步骤。

通过查看和分析查询日志,我们可以了解哪些查询在执行时遇到了问题,例如执行时间过长、资源消耗过大等。

以下是一些建议和步骤,帮助你有效地跟踪和分析PostgreSQL的查询日志。

启用查询日志
首先,你需要启用查询日志功能。这可以通过修改PostgreSQL的配置文件(通常是postgresql.conf)来实现。在配置文件中,找到以下两个参数并进行设置:

logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M.log'
log_statement = 'all' # 可以设置为 'none', 'ddl', 'mod', 'all' 来控制记录的日志级别

将logging_collector设置为on以启用日志收集器,并设置日志的目录和文件名格式。log_statement参数决定了要记录哪些类型的SQL语句,通常设置为'all'以记录所有语句,但你也可以根据需要设置为其他级别。

其他几个重要参数说明:

log_rotation_age = 1440    #minute,多长时间创建新的文件记录日志。0 表示禁扩展。
log_rotation_size = 10240 #kb,文件多大后创建新的文件记录日志。0 表示禁扩展。
log_truncate_on_rotation = on #可重用同名日志文件

修改配置文件后,你需要重启PostgreSQL服务以使更改生效。

分析查询日志
一旦你开始收集查询日志,你就可以开始分析这些日志以查找性能问题。以下是一些建议:

1. 查找执行时间长的查询
通过查看日志中每个查询的执行时间,你可以找到执行时间较长的查询。这些查询可能是性能瓶颈的主要来源。你可以使用文本编辑器或命令行工具(如grep和awk)来搜索和排序这些查询。

例如,使用grep和awk来提取执行时间超过1秒的查询:

先切换到对应目录

cd $PGDATA/pg_log
grep 'duration:' postgresql-*.log | awk '{ if ($4 > 1000) print }'

这个命令会输出所有执行时间超过1秒的查询及其相关信息,包括查询文本和执行时间。你可以根据这些信息进一步分析并优化这些查询。

2. 分析资源消耗
除了执行时间,你还可以查看查询对系统资源的消耗情况,如磁盘I/O、CPU使用率和内存使用情况。这有助于你了解查询是否因为资源争用而变慢。

3. 优化查询
一旦你找到了性能瓶颈的查询,你就可以开始优化这些查询。这可能包括:

  • 优化查询语句,如使用更高效的JOIN方式、减少不必要的子查询等。
  • 创建或调整索引,以加速查询。
  • 调整数据库配置参数,以优化性能。

跟踪SQL慢语句

postgresql.conf需要设置以下参数:

log_statement = all    #需设置跟踪所有语句,否则只能跟踪出错信息
log_min_duration_statement = 5000 #milliseconds,记录执行5秒及以上的语句

注:当 log_statement=all 和 log_min_duration_statement 同时设置时,将跟踪所有语句,忽略log_min_duration_statement 设置。所以需按情况设置其中一个或两个值。

数据库执行加载配置

select pg_reload_conf();
show log_min_duration_statement;

针对某个用户或者某数据库(test)进行设置

 alter database test set log_min_duration_statement=5000; 

捕获正在查询的慢SQL

--执行时间超过 10s 的语句
select * from pg_stat_activity where state<>'idle' and now()-query_start > interval '5 s'
--锁表
SELECT * FROM pg_stat_activity where datname='bms' and wait_event_type='Lock'--limit 10

Q:在PostgreSQL中跟踪和分析查询日志的更多相关文章

  1. Postgresql通过pg_waldump来分析pg_wal日志

    一.简介 读取MySQL的binlog 并将其解析为可读的日志是一件简单的事情,mysqlbinlog 命令就可以将bin日志解析, 那postgresql是否可以将pg_wal 中的日志进行解析,并 ...

  2. mysql中slow query log慢日志查询分析

    在mysql中slow query log是一个非常重要的功能,我们可以开启mysql的slow query log功能,这样就可以分析每条sql执行的状态与性能从而进行优化了. 一.慢查询日志 配置 ...

  3. mysqlsla 分析mysql慢查询日志

    发现有一个工具mysqlsla,分析查询日志比 mysqldumpslow分析的会更清晰明了! 安装mysqlsla: 下载mysqlsla-2.03.tar.gz [root@yoon export ...

  4. mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)

    mysql性能优化-慢查询分析.优化索引和配置 (慢查询日志,explain,profile) 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 ...

  5. MySQL(十三)MySQL性能分析工具:慢查询日志与PROFILE查询成本

    性能分析工具SLOW QUERY LOG.PROFILE的使用 ​ 数据库调优的目标就是响应速度更快,吞吐量更大.利用宏观的监控工具和微观的日志分析可以帮助我们找到调优的思路和方式. 数据库调优的步骤 ...

  6. MySQL查询日志总结

    MySQL查询日志介绍 MySQL的查询日志记录了所有MySQL数据库请求的信息.无论这些请求是否得到了正确的执行.默认文件名为hostname.log.默认情况下MySQL查询日志是关闭的.生产环境 ...

  7. MySQL查询日志介绍

    MySQL查询日志介绍 MySQL的查询日志记录了所有MySQL数据库请求的信息.无论这些请求是否得到了正确的执行.默认文件名为hostname.log.默认情况下MySQL查询日志是关闭的.生产环境 ...

  8. 浅谈Redis之慢查询日志

    首先我们需要知道redis的慢查询日志有什么用?日常在使用redis的时候为什么要用慢查询日志? 第一个问题: 慢查询日志是为了记录执行时间超过给定时长的redis命令请求 第二个问题: 让使用者更好 ...

  9. mysql 通过慢查询日志查写得慢的sql语句

    MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysqld 会写一个包含所有执行时间超过long_query_t ...

  10. Redis | 第10章 二进制数组、慢查询日志和监视器《Redis设计与实现》

    目录 前言 1. 二进制位数组 1.1 位数组的表示 1.2 GETBIT 命令的实现 1.3 SETBIT 命令的实现 1.4 BITECOUNT 命令的实现 1.5 BITOP 命令的实现 2. ...

随机推荐

  1. (Redis基础教程之一)如何在Ubuntu 18.04上安装和保护Redis

    如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...

  2. pve 下的群晖虚拟机硬盘空间扩容的记录

    pve下,105号群晖虚拟机,btrfs系统,sata硬盘. 虚拟机容量硬盘130G,扩展至140G,还需要命令行和网页存储管理器界面操作,以实现扩容的目的. df -h Filesystem Siz ...

  3. K8S钩子、探针以及控制器完整版

    一. 生命周期钩子 Kubernetes 中的 生命周期钩子(Lifecycle Hooks) 是在容器生命周期的特定阶段执行操作的机制.通过钩子,可以在容器启动后(PostStart)或停止前(Pr ...

  4. uni-app中使用svg

    标签: svg js uni-app 前情 uni-app是我很喜欢的跨平台框架,它能开发小程序,H5,APP(安卓/iOS),对前端开发很友好,自带的IDE让开发体验也很棒,公司项目就是主推uni- ...

  5. Shiro安全框架【认证】+【授权】

    1.Shiro的核心架构 Subject:程序主体 Security Manager:安全管理器 Authentication:做认证 Authorizer:做授权 Session Manager:会 ...

  6. [AI回答]Java中Long和long的区别,为什么在Springboot项目中一般使用Long

    Long 和 long 的区别 在Java中,Long 和 long 是两个不同的概念,它们分别代表不同的数据类型: long: 这是一个 基本数据类型 (primitive type). 它用于存储 ...

  7. 【前端】HTML编码效提升:快速生成HTML标签

    目录 1.生成多级标签 2.生成同级标签 3.生成注释 4.生成多个相同标签 5.生成带class标签 6生成带id标签. 7.生成带内容标签1 8.生成带内容标签2 9.生成带属性标签 GIF演示: ...

  8. Qt编写安防视频监控系统60-子模块4云台控制

    一.前言 云台控制是一个很老很基础的模块了,视频监控系统中必备的特殊模块之一,可以对选中的通道的摄像机(ONVIF协议),进行云台控制,可以控制球机的上下左右等各个方位的移动,还可以调节变倍步长,至于 ...

  9. Qt音视频开发41-人脸识别嵌入式

    一.前言 大概几年前搞过一套嵌入式linux上的人脸识别程序,当然人脸识别的核心算法并不是自己开发的,关于人脸识别算法这一块,虽然有众多的开源库可以用,甚至还可以用opencv搞算法训练深度学习之类的 ...

  10. 基于实践:一套百万消息量小规模IM系统技术要点总结

    本文由公众号"后台技术汇"分享,原题"基于实践,设计一个百万级别的高可用 & 高可靠的 IM 消息系统",原文链接在文末.由于原文存在较多错误和不准确内 ...