如何获取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…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...