在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. Nuxt.js 应用中的 beforeResponse 事件钩子

    title: Nuxt.js 应用中的 beforeResponse 事件钩子 date: 2024/12/5 updated: 2024/12/5 author: cmdragon excerpt: ...

  2. .NET静态代码编织——肉夹馍(Rougamo)5.0

    肉夹馍(https://github.com/inversionhourglass/Rougamo),一款编译时AOP组件.相比动态代理AOP需要在应用启动时进行初始化,编译时完成代码编织的肉夹馍减少 ...

  3. 推荐7个最强Appium替代工具,移动App自动化测试必备!

    在移动应用开发日益火爆的今天,自动化测试成为了确保应用质量和用户体验的关键环节.Appium 作为一款广泛应用的移动应用自动化测试工具,为测试人员所熟知.然而,在不同的测试场景和需求下,还有许多其他优 ...

  4. rocketMQ集群部署

    RocketMQ集群部署 RocketMQ是一款非常优秀的消息中间件,运用的场景也是非常丰富,且在各大公司运用中也非常广泛.但是它是如何进行部署的呢,以及它的高可用是如何实现的呢.那么就由我来为大家讲 ...

  5. vue开发一个简单的组件

    首先在项目中新建一个js文件 在文件内创建一个对象,对象内创建install方法,将对象用export default暴漏出去 export default{ install(){ console.l ...

  6. 当年的毕设-cpf (一个简易的协议 fuzzer)

    整理文件时发现了这个,看是否有人需要... https://github.com/hac425xxx/cpf/ cpf 一个简单的协议Fuzz工具. 毕设答辩胶片&演示视频 https://g ...

  7. powershell禁止系统运行脚本

    错误信息: set-executionpolicy remotesigned set-executionpolicy : Windows PowerShell 已成功更新你的执行策略,但在更具体的作业 ...

  8. 常用 NoSQL 比较

    Q: 请根据 CAP 实现程度,分布式实现方式,数据结构,查询方式,存储引擎等比较 mongodb, redis, cassandra, scylladb, dragonflydb, TiKV, co ...

  9. tar/zip命令加密压缩

    回到顶部 场景 Centos6下使用加密压缩,可以从A机器到B机器解压. 可用在kali上解压就不行. 回到顶部 命令 解包 tar zxvf FileName.tar 打包 tar czvf Fil ...

  10. Qt开源作品5-仪表盘交互

    一.前言 Echart是百度研发团队开发的一款报表视图JS插件,功能十分强大,是本人用过的国产作品中最牛逼的,记得四五年前就在qt中使用过,当时用的浏览器控件是webkit,由于5.6以后的版本不再支 ...