Q:在PostgreSQL中跟踪和分析查询日志
在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中跟踪和分析查询日志的更多相关文章
- Postgresql通过pg_waldump来分析pg_wal日志
一.简介 读取MySQL的binlog 并将其解析为可读的日志是一件简单的事情,mysqlbinlog 命令就可以将bin日志解析, 那postgresql是否可以将pg_wal 中的日志进行解析,并 ...
- mysql中slow query log慢日志查询分析
在mysql中slow query log是一个非常重要的功能,我们可以开启mysql的slow query log功能,这样就可以分析每条sql执行的状态与性能从而进行优化了. 一.慢查询日志 配置 ...
- mysqlsla 分析mysql慢查询日志
发现有一个工具mysqlsla,分析查询日志比 mysqldumpslow分析的会更清晰明了! 安装mysqlsla: 下载mysqlsla-2.03.tar.gz [root@yoon export ...
- mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)
mysql性能优化-慢查询分析.优化索引和配置 (慢查询日志,explain,profile) 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 ...
- MySQL(十三)MySQL性能分析工具:慢查询日志与PROFILE查询成本
性能分析工具SLOW QUERY LOG.PROFILE的使用 数据库调优的目标就是响应速度更快,吞吐量更大.利用宏观的监控工具和微观的日志分析可以帮助我们找到调优的思路和方式. 数据库调优的步骤 ...
- MySQL查询日志总结
MySQL查询日志介绍 MySQL的查询日志记录了所有MySQL数据库请求的信息.无论这些请求是否得到了正确的执行.默认文件名为hostname.log.默认情况下MySQL查询日志是关闭的.生产环境 ...
- MySQL查询日志介绍
MySQL查询日志介绍 MySQL的查询日志记录了所有MySQL数据库请求的信息.无论这些请求是否得到了正确的执行.默认文件名为hostname.log.默认情况下MySQL查询日志是关闭的.生产环境 ...
- 浅谈Redis之慢查询日志
首先我们需要知道redis的慢查询日志有什么用?日常在使用redis的时候为什么要用慢查询日志? 第一个问题: 慢查询日志是为了记录执行时间超过给定时长的redis命令请求 第二个问题: 让使用者更好 ...
- mysql 通过慢查询日志查写得慢的sql语句
MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysqld 会写一个包含所有执行时间超过long_query_t ...
- Redis | 第10章 二进制数组、慢查询日志和监视器《Redis设计与实现》
目录 前言 1. 二进制位数组 1.1 位数组的表示 1.2 GETBIT 命令的实现 1.3 SETBIT 命令的实现 1.4 BITECOUNT 命令的实现 1.5 BITOP 命令的实现 2. ...
随机推荐
- Python:编程“八荣八耻”之我见
刚在逛CPyUG时看到了个主题讨论python的八荣八耻,见:http://bit.ly/4jeBor, 主题内容如下: 以动手实践为荣,以只看不练为耻. 以打印日志为荣,以单步跟踪为耻. 以空白 ...
- Winform TabControl动态添加TabPage
在Winform中,标签页是我们很难绕开的一个控件,而且,我们经常有动态添加标签页的需求. 这里介绍一个最简单的添加方法: 首先,我们把需要添加的内容做成UserControl,这样,我们就可以在添加 ...
- GodoOS 入选 Gitee 最有价值开源项目
2024年11月1日,GodoOS荣耀地入选了GVP--Gitee最有价值开源项目.在GVP平台收录的418个杰出项目中,GodoOS作为唯一一款用GO语言开发的.维护中的跨平台webOS的桌面应用, ...
- 【ElementPlus】el-form使用技巧:动态切换校验规则的最佳实践
喵~ 今天分享一篇在 ElementPlus 中使用 el-form 动态切换校验规则 的实用方法. 一.问题概述 作为前端开发人员,在开发项目中,特别是后台管理系统,表单的使用是必不可少的.当业务需 ...
- solon 集成 rocketmq5 sdk
使用 rocketmq5 是比较简单的事情.也有些同学对 sdk 原始接口会陌生,会希望有个集成的示例. <dependency> <groupId>org.apache.ro ...
- Arrays Basics
`#include ; using namespace std; int main() { int A[5];//数组的声明 int B[5] = { 2,4,6,8,10 };//数组的声明和初始化 ...
- 精通 ASP.NET Core MVC (第 7 版) 源码下载
将使用的 .NET 版本更新到 5.0 版本. GitHub 地址:https://github.com/haoguanjun/pro-asp.net-core-mvc-2
- mysql restart
bin/mysqld --defaults-file=/etc/mysql.cnf --user=mysql bin/mysqld --user=app --basedir=/opt/mysql-5. ...
- Qt开源作品28-邮件发送工具
一.前言 邮件发送工具是好多年前就开源出来的,核心就是调用最底层socket通信来实现的邮件发送程序,以前用C#写过,微软都封装好的,不知道底层是如何实现的,只知道调用方法,这次用C++实现了下,参考 ...
- 在C#中如何设置DateTimePicker控件显示“年-月-日 时:分:秒”的格式
在C#中DateTimePicker控件默认显示的日期格式为"年-月-日",并未显示"时:分:秒",如何设置DateTimePicker控件显示"年- ...