当前位置: 首页 > news >正文

postgresql慢查询排查和复现

postgresql慢查询排查和复现

一. 介绍一张表:pg_stat_activity

pg_stat_activity 是 PostgreSQL 中一个非常有用的系统视图,提供了有关当前数据库连接和活动查询的信息。通过查询这个视图,你可以获取有关正在执行的查询、连接的用户、进程 ID 等信息。以下是 pg_stat_activity 视图中的一些关键列:

  1. datid: 数据库标识符,表示正在连接的数据库的唯一标识符。
  2. datname: 数据库名称。
  3. pid: 进程 ID,表示数据库连接的唯一标识符。
  4. usesysid: 连接用户的系统标识符。
  5. usename: 连接用户名。
  6. application_name: 连接的应用程序名称(如果应用程序设置了名称)。
  7. client_addr: 客户端的 IP 地址。
  8. client_hostname: 客户端的主机名。
  9. client_port: 客户端连接使用的端口。
  10. backend_start: 连接开始时的时间戳。
  11. xact_start: 事务开始时的时间戳。
  12. query_start: 查询开始执行的时间戳。
  13. state: 连接状态(例如,idle、active、idle in transaction 等)。
    • active: 表示当前连接正在执行查询或事务。
    • idle: 表示当前连接处于空闲状态,没有正在执行的查询或事务。
    • idle in transaction: 表示当前连接处于事务中,但没有正在执行的查询。可能是事务开始后一段时间没有活动。
    • idle in transaction (aborted): 表示当前连接处于事务中,但由于某种原因事务已被中止。
    • fastpath function call: 表示当前连接正在执行一个快速路径函数调用。
    • disabled: 表示当前连接的活动状态已被禁用。
  14. query: 当前正在执行的查询文本。
  15. waiting: 是否在等待锁。

pg_stat_activity 视图,可以监视当前数据库连接的活动状态,了解哪些查询正在执行及运行时间等信息。

二. 复现慢查询

在查询中引入延迟,pg_sleep() 是 PostgreSQL 中的一个函数,用于在查询中引入延迟。这个函数会使查询进程休眠指定的秒数。如果不提供参数,默认为 0 秒。切记不要再生产环境使用.

SELECT pg_sleep(100); -- 这将使查询休眠100秒钟
三. 排查慢查询语句

总的来说,这个查询可以识别数据库中运行时间较长的查询(下面是排查超过30秒的sql,可根据实际需要修改)。

SELECT pid, datname, usename, query, extract(epoch from (now() - query_start)) as total_time, count(1) AS slowsql_count FROM pg_stat_activity where state not in('idle') and query !='' and extract(epoch from (now() - query_start)) > 30  GROUP BY pid, datname, usename, query, total_time;
  1. SELECT pid, datname, usename, query, extract(epoch from (now() - query_start)) as total_time, count(1) AS slowsql_count
    • pid: 进程ID,表示数据库连接的唯一标识符。
    • datname: 数据库名称。
    • usename: 执行查询的用户名称。
    • query: 正在执行的查询文本。
    • extract(epoch from (now() - query_start)) as total_time: 通过计算当前时间与查询开始时间的差值,获取查询已运行的总时间(以秒为单位)。
    • count(1) AS slowsql_count: 用于计算相同查询的数量,即慢查询的数量。
  2. FROM pg_stat_activity
    • 从 PostgreSQL 的 pg_stat_activity 视图中选择活跃的数据库连接信息。这个视图包含了关于当前数据库会话和查询的统计信息。
  3. WHERE state NOT IN ('idle') AND query != '' AND extract(epoch from (now() - query_start)) > 10
    • state NOT IN ('idle'): 确保排除处于空闲状态的数据库连接,只选择活跃的连接。
    • query != '': 排除空查询,确保只选择正在执行的查询。
    • extract(epoch from (now() - query_start)) > 30: 选择运行时间超过30秒的查询。
  4. GROUP BY pid, datname, usename, query, total_time
    • 对选择的结果进行分组,以便聚合相同查询的统计信息。

查询结果:成功定位到慢查询语句:SELECT pg_sleep(100);

在这里插入图片描述

四. 慢查询优化方案
  1. 查询优化:
    • 通过使用 EXPLAIN 分析查询计划,了解 PostgreSQL 是如何执行查询的。优化查询计划可以提高查询性能。
    • 调整查询,避免不必要的全表扫描,确保正确使用索引。
  2. 索引优化:
    • 确保表上的索引是合理的,并涵盖了查询中用于筛选和排序的列。
    • 避免过多的索引,因为它们可能会导致性能下降。
  3. 统计信息更新:
    • 确保 PostgreSQL 统计信息是最新的。自动化统计信息更新可以通过 PostgreSQL 的自动统计信息收集器来完成。
  4. 分区表:
    • 对大型表进行分区,可以提高查询性能,尤其是对那些经常使用范围查询的表。
  5. 调整内存配置:
    • 调整 shared_bufferseffective_cache_size 参数,以确保数据库能够充分利用系统内存。
  6. 定期维护:
    • 定期执行 VACUUMANALYZE 操作,以确保表的空间得到优化,同时更新统计信息。
  7. 使用连接池:
    • 考虑使用连接池,例如 PgBouncer,以减轻数据库服务器的负载。
  8. 日志和监控:
    • 启用 PostgreSQL 的查询日志,并使用工具如 pgBadger 分析日志,以便及时发现慢查询。
    • 使用监控工具,如 pg_stat_statements 扩展,监视查询性能。
  9. 升级 PostgreSQL 版本:
    • 考虑升级到最新的 PostgreSQL 版本,因为新版本通常包含性能改进和优化。
  10. 使用扩展:
    • 考虑使用一些性能优化的扩展,例如 pg_repack 用于表重组,pg_partman 用于表分区等。

常包含性能改进和优化。
10. 使用扩展:
- 考虑使用一些性能优化的扩展,例如 pg_repack 用于表重组,pg_partman 用于表分区等。

相关文章:

postgresql慢查询排查和复现

postgresql慢查询排查和复现 一. 介绍一张表:pg_stat_activity pg_stat_activity 是 PostgreSQL 中一个非常有用的系统视图,提供了有关当前数据库连接和活动查询的信息。通过查询这个视图,你可以获取有关正在执行的查询、连接的用户、进程 …...

【服务器】搭建ChatGPT站点常见问题

目录 ❓ 常见问题 🌼1. 什么是OpenAI APIkey? 🌼2. 什么是Token? 🌼3. 为什么回复不是GPT-4? 🌼4. 如何区分 GPT-3.5 和 GPT-4 🌼5. 为什么回复到一半卡住? 🌼6.…...

QT+opengl 创建一个六边形

一.关键名词解释 VAO: Vertex Array Object, 顶点数组对象,你要绘制的图形。 VBO:Vertex Buffer Object, 顶点缓冲对象,所有顶点的集合。 EBO:Element Buffer Object, 元素缓冲对象,顶点的索引值。 IBO: Index Buffer Object, 索引缓冲对象。…...

Android imageView.setImageXXX() 引发的卡顿问题

在 Android 开发中,ImageView 是一个用户界面控件,用于在应用中显示图片。它是 Android UI 组件库中一个非常基础和常用的部分。使用 ImageView,你可以在屏幕上显示来自不同来源的图像,比如位图文件、绘图资源 drawable、网络来源…...

MavenGradle等引入jSerialComm

引入 jSerialComm [2.0.0,3.0.0) 此版本发布于 Nov 7, 2023 (23年11月) Maven: <dependency><groupId>com.fazecast</groupId><artifactId>jSerialComm</artifactId><version>[2.0.0,3.0.0)</version> </dependency>Ivy: …...

热门技术问答 | 请 GaussDB 用户查收

近年来&#xff0c;Navicat 与华为云 GaussDB 展开一系列技术合作&#xff0c;为 GaussDB 用户提供面向管理开发工具的生态工具。Navicat 现已完成 GaussDB 主备版&#xff08;单节点、多节点&#xff09;和分布式数据库的多项技术对接。Navicat 通过工具的流畅性和实用性&…...

【C/C++ 01】初级排序算法

排序算法通常是针对数组或链表进行排序&#xff0c;在C语言中&#xff0c;需要手写排序算法完成对数据的排序&#xff0c;排序规则通常为升序或降序&#xff08;本文默认为升序&#xff09;&#xff0c;在C中&#xff0c;<algorithm>头文件中已经封装了基于快排算法的 st…...

Android Settings 显示电池点亮百分比

如题&#xff0c;Android 原生 Settings 里有个 电池电量百分比 的选项&#xff0c;打开后电池电量百分比会显示在状态栏。 基于 Android 13 &#xff0c; 代码在 ./packages/apps/Settings/src/com/android/settings/display/BatteryPercentagePreferenceController.java &am…...

Windows记事本不显示下划线的原因及解决方法

最近使用Windows 记事本敲代码发现一个问题&#xff1a;代码中的下划线无法显示&#xff01;&#xff01;&#xff01;(字体为“微软雅黑”、字体大小为11下&#xff0c;代码中的下划线无法显示。当然每个人情况可能不同) 在 Windows 记事本中&#xff0c;下划线可能会因为 字体…...

嵌入式软件工程师面试题——2025校招社招通用(C/C++)(四十六)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…...

【学网攻】 第(13)节 -- 动态路由(OSPF)

系列文章目录 目录 系列文章目录 文章目录 前言 一、动态路由是什么&#xff1f; 二、实验 1.引入 实验拓扑图 实验配置 实验验证 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学…...

Asp.Net Core 获取应用程序相关目录

在ASP.NET Core中&#xff0c;可以通过以下三种方式获取应用程序所在目录&#xff1a; 1、使用AppContext.BaseDirectory属性&#xff1a; string appDirectory AppContext.BaseDirectory; 例如&#xff1a;D:\后端项目\testCore\test.WebApi\bin\Debug\net6.0\ 2、使用…...

文献速递:人工智能医学影像分割--- 深度学习分割骨盆骨骼:大规模CT数据集和基线模型

文献速递&#xff1a;人工智能医学影像分割— 深度学习分割骨盆骨骼&#xff1a;大规模CT数据集和基线模型 我们为大家带来人工智能技术在医学影像分割上的应用文献。 人工智能在医学影像分析中发挥着至关重要的作用&#xff0c;尤其体现在图像分割技术上。这项技术的目的是准…...

PaddleNLP的简单使用

1 介绍 PaddleNLP是一个基于PaddlePaddle深度学习平台的自然语言处理&#xff08;NLP&#xff09;工具库。 它提供了一系列用于文本处理、文本分类、情感分析、文本生成等任务的预训练模型、模型组件和工具函数。 PaddleNLP有统一的应用范式&#xff1a;通过 paddlenlp.Task…...

2. MySQL 多实例

重点&#xff1a; MySQL 的 三种安装方式&#xff1a;包安装&#xff0c;二进制安装&#xff0c;源码编译安装。 MySQL 的 基本使用 MySQL 多实例 DDLcreate alter drop DML insert update delete DQL select 2.5&#xff09;通用 二进制格式安装 MySQL 2.5.1&#xff…...

两个五层决策树和一个十层决策树的区别

随机森林的弹性: 随机森林中的多个决策树是相互独立构建的&#xff0c;因此两个五层决策树和一个十层决策树之间的区别可能在于它们对训练数据的不同学习。这种弹性有助于模型更好地适应不同的数据模式。 过拟合风险: 十层决策树可能更容易过拟合训练数据&#xff0c;尤其是在数…...

案例分析技巧-软件工程

一、考试情况 需求分析&#xff08;※※※※&#xff09;面向对象设计&#xff08;※※&#xff09; 二、结构化需求分析 数据流图 数据流图的平衡原则 数据流图的答题技巧 利用数据平衡原则&#xff0c;比如顶层图的输入输出应与0层图一致补充实体 人物角色&#xff1a;客户、…...

如何使用docker compose安装APITable并远程访问登录界面

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 …...

深入了解Matplotlib中的子图创建方法

深入了解Matplotlib中的子图创建方法 一 add_axes( **kwargs):1.1 函数介绍1.2 示例一 创建第一张子图1.2 示例二 polar参数的运用1.3 示例三 创建多张子图 二 add_subplot(*args, **kwargs):2.1 函数介绍2.2 示例一 三 两种方法的区别3.1 参数形式3.2 布局灵活性3.3 适用场景3…...

云计算运维 · 第三阶段 · git

学习b记 第三阶段 三、持续集成 1、git #安装 yum -y install git[rootgit-git ~]# git config –-global user.name "qxl" # 配置git使用用户 [rootgit-git ~]# git config –-global user.email "qxlmail.com" # 配置git使用邮箱 [rootgit-git ~]# g…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...