如何获取PostgreSQL慢查询?从小白到高手的实战指南
数据库优化是性能调优的核心,而慢查询则是性能瓶颈的罪魁祸首。如何找到慢查询并优化它们,是每个开发者和DBA都必须掌握的技能。
今天,我们就来聊聊如何在PostgreSQL中快速获取慢查询日志,并结合不同场景进行分析优化。本文风格参考阮一峰老师,简洁明了,人人都能看懂。
一、什么是慢查询?
慢查询就是那些执行时间超出预期,可能导致数据库响应变慢的SQL语句。找到它们,就像在找系统性能问题的“黑洞”。
PostgreSQL提供了多种方法来捕捉慢查询,从日志分析到系统自带的性能视图,一应俱全。
二、启用慢查询日志
1. 修改postgresql.conf
要想让PostgreSQL记录慢查询日志,首先要启用相关配置。你需要修改postgresql.conf
文件中的以下几项:
# 启用日志记录
log_min_duration_statement = 1000 # 单位为毫秒,记录超过1秒的查询
log_statement = 'all' # 可选项:none、ddl、mod、all
这段配置的含义是:记录所有超过1秒的SQL语句。你可以根据实际情况调整log_min_duration_statement
的阈值,比如500ms甚至100ms。
2. 重启PostgreSQL
修改配置后,需要重启服务以使配置生效:
sudo systemctl restart postgresql
3. 验证日志输出
执行一条故意耗时的查询:
SELECT pg_sleep(2); -- 模拟2秒查询
然后查看PostgreSQL日志文件,应该能看到类似的输出:
2024-11-14 10:00:00.123 CST [12345] LOG: duration: 2003.123 ms statement: SELECT pg_sleep(2);
日志中清楚地记录了查询耗时和SQL语句。
三、场景1:查询优化,手动排查慢SQL
1. 使用EXPLAIN
分析查询计划
发现慢查询后,第一步是分析它的执行计划:
EXPLAIN ANALYZE SELECT * FROM large_table WHERE column = 'value';
输出示例:
Seq Scan on large_table (cost=0.00..431.00 rows=10000 width=12) (actual time=0.123..10.456 rows=100 loops=1)
从结果中可以看到,顺序扫描(Seq Scan) 是导致查询慢的原因。
2. 添加索引
优化方案之一是给large_table
的column
列添加索引:
CREATE INDEX idx_large_table_column ON large_table(column);
再执行查询,性能将显著提升。
四、场景2:动态分析,使用pg_stat_statements
对于实时监控,我们可以使用PostgreSQL自带的扩展:pg_stat_statements。
1. 安装和启用扩展
在postgresql.conf
中启用:
shared_preload_libraries = 'pg_stat_statements'
然后执行以下SQL命令来创建扩展:
CREATE EXTENSION pg_stat_statements;
2. 查询慢SQL统计信息
通过以下SQL获取最耗时的查询:
SELECT query, total_time, calls, mean_time
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 5;
输出示例:
Query | Total Time | Calls | Mean Time |
---|---|---|---|
SELECT * FROM large_table WHERE column… | 5000 ms | 10 | 500 ms |
INSERT INTO orders … | 3000 ms | 5 | 600 ms |
这个方法可以快速定位执行最频繁、耗时最高的SQL。
五、场景3:自动化分析,结合开源工具
在大型系统中,手动分析慢查询往往效率低下。推荐使用pgBadger,一个开源的日志分析工具。
1. 安装pgBadger
使用以下命令安装pgBadger:
sudo apt install pgbadger
2. 分析日志文件
假设PostgreSQL日志文件存储在/var/log/postgresql/postgresql.log
:
pgbadger /var/log/postgresql/postgresql.log -o report.html
pgBadger会生成一个HTML报告,包含详细的慢查询统计和性能分析。
六、总结
从日志捕捉到实时监控,再到自动化分析,PostgreSQL为我们提供了多种获取慢查询的方法。希望本文能帮助大家快速定位并优化慢SQL。
优化性能,从慢查询开始!
相关文章:

如何获取PostgreSQL慢查询?从小白到高手的实战指南
数据库优化是性能调优的核心,而慢查询则是性能瓶颈的罪魁祸首。如何找到慢查询并优化它们,是每个开发者和DBA都必须掌握的技能。 今天,我们就来聊聊如何在PostgreSQL中快速获取慢查询日志,并结合不同场景进行分析优化。本文风格参…...

golang分布式缓存项目 Day4 一致性哈希
注:该项目原作者:https://geektutu.com/post/geecache-day1.html。本文旨在记录本人做该项目时的一些疑惑解答以及部分的测试样例以便于本人复习 为什么使用一致性哈希 我该访问谁 对于分布式缓存来说,当一个节点接收到请求,如…...

ARM 汇编指令
blr指令的基本概念和用途 在 ARM64 汇编中,blr是 “Branch with Link to Register” 的缩写。它是一种分支指令,主要用于跳转到一个由寄存器指定的地址,并将返回地址保存到链接寄存器(Link Register,LR)中。…...

打造个性化体验:在Axure中创建你的专属组件库
打造个性化体验:在Axure中创建你的专属组件库 在数字产品设计的浪潮中,效率和一致性是设计团队追求的两大圣杯。 随着项目的不断扩展,重复性的工作逐渐增多,设计师们开始寻找能够提高工作效率、保持设计一致性的解决方案。 而 …...

如何用WordPress和Shopify提升SEO表现?
选择合适的建站程序对于SEO优化非常重要。目前,WordPress和Shopify是两种备受推崇的建站平台,各有优势。 WordPress最大的优点是灵活性。它支持大量SEO插件,帮助你调整元标签、生成站点地图、优化内容结构等。这些功能让你能够轻松地提升网站…...

不泄密的安全远程控制软件需要哪些技术
在数字化浪潮中,远程控制软件已不再是简单的辅助工具,而是成为企业运作和日常工作中不可或缺的一部分。随着远程办公模式的广泛采纳,这些软件提供了一种既安全又高效的途径来管理和访问远端系统。无论是在家办公、技术支持还是远程教育&#…...

rust高级特征
文章目录 不安全的rust解引用裸指针裸指针与引用和智能指针的区别裸指针使用解引用运算符 *,这需要一个 unsafe 块调用不安全函数或方法在不安全的代码之上构建一个安全的抽象层 使用 extern 函数调用外部代码rust调用C语言函数rust接口被C语言程序调用 访问或修改可…...

STM32F407简单驱动步进电机(标准库)
配置 单片机型号:STM32F104ZGT6 步进电机:YK28HB40-01A 驱动器:YKD2204M-Plus 接线方式: pu:接对应的产生PWM的引脚,这里接PF9,对应TIM14_CH1通道! pu-:接单片机的G…...

使用热冻结数据层生命周期优化在 Elastic Cloud 中存储日志的成本
作者:来自 Elastic Jonathan Simon 收集数据对于可观察性和安全性至关重要,而确保数据能够快速搜索且获得低延迟结果对于有效管理和保护应用程序和基础设施至关重要。但是,存储所有这些数据会产生持续的存储成本,这为节省成本创造…...
LeetCode131. 分割回文串(2024冬季每日一题 4)
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 示例 1: 输入:s “aab” 输出:[[“a”,“a”,“b”],[“aa”,“b”]] 示例 2: 输入:s “a…...

万字长文解读深度学习——训练(DeepSpeed、Accelerate)、优化(蒸馏、剪枝、量化)、部署细节
🌺历史文章列表🌺 深度学习——优化算法、激活函数、归一化、正则化深度学习——权重初始化、评估指标、梯度消失和梯度爆炸深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总万字长文解读…...

STM32—独立看门狗(IWDG)和窗口看门狗(WWDG)
概述: WDG(Watchdog) 看门狗,看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能计时复位程序,避免程序陷入长时间的罢工状态,保证系…...

ks8 本地化部署 F5-TTS
huggingface上有一个demo可以打开就能玩 https://huggingface.co/spaces/mrfakename/E2-F5-TTS 上传了一段懂王的演讲片段,然后在 generate text框内填了点古诗词,生成后这语气这效果,离真懂王就差一个手风琴了。 F5-TTS 项目地址…...

Web组态大屏可视化编辑器
1、零代码、一键构建、一键下载 用户只需通过拖拉拽操作,即可在画布上添加、调整和排列各种设备组件、图表和控件。零代码拖拽方式让用户能够实时预览界面效果,直观地观察布局、样式和数据的变化。 2、实时展示,自动化连接数据,用…...

【comfyui教程】让模特换衣服,comfyui一键搞定!
前言 一键穿上别人的衣服?揭秘ComfyUI模特换装工作流! 你有没有想过,某天早晨你起床后,只需轻轻一点,就能穿上明星昨晚在红毯上的华丽礼服?这种听起来像是科幻电影的情节,如今通过ComfyUI模特…...
数据湖与数据仓库的区别
数据湖与数据仓库是两种不同的数据存储和管理方式,它们在多个方面存在显著的区别。以下是对数据湖与数据仓库区别的详细阐述: 一、数据存储方式 数据仓库 通常采用预定义的模式和结构来存储数据。数据在存储前通常经过清洗、转换和整合等处理࿰…...
golang分布式缓存项目 Day6 防止缓存击穿
该项目原作者:https://github.com/geektutu/7days-golang。本文旨在记录本人做该项目时的一些疑惑解答以及部分的测试样例以便于本人复习。 1 缓存雪崩、缓存击穿与缓存穿透 概念解析: 缓存雪崩:缓存在同一时刻全部失效,造成瞬…...

Redis高可用-主从复制
这里写目录标题 Redis主从复制主从复制过程环境搭建从节点配置常见问题主从模式缺点 Redis主从复制 虽然 Redis 可以实现单机的数据持久化,但无论是 RDB 也好或者 AOF 也好,都解决不了单点宕机问题,即一旦 redis 服务器本身出现系统故障、硬…...
Angular框架:构建现代Web应用的全面指南
文章目录 前言一、Angular简介二、Angular的核心特性三、Angular的应用场景四、Angular的发展趋势五、如何开始使用Angular结语 前言 在当今高度竞争的互联网环境中,构建高效、响应迅速且易于维护的Web应用成为企业成功的关键。Angular框架以其强大的功能、灵活的架…...

Golang | Leetcode Golang题解之第563题二叉树的坡度
题目: 题解: func findTilt(root *TreeNode) (ans int) {var dfs func(*TreeNode) intdfs func(node *TreeNode) int {if node nil {return 0}sumLeft : dfs(node.Left)sumRight : dfs(node.Right)ans abs(sumLeft - sumRight)return sumLeft sumRi…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...