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

如何排查阻塞语句

文章目录

  • 文档用途
  • 详细信息

文档用途

查询阻塞当前sql的语句,并结束阻塞语句。

详细信息

1、通过pg_stat_activity视图和pg_blocking_pids函数查找阻塞sql。

highgo=# select pid,pg_blocking_pids(pid),wait_event_type,wait_event,query from pg_stat_activity ;pid  | pg_blocking_pids | wait_event_type |     wait_event      |                                           query-------+------------------+-----------------+---------------------+-------------------------------------------------------------------
------------------------12781 | {}               | Activity        | LogicalLauncherMain |12778 | {}               | Activity        | AutoVacuumMain      |16717 | {}               | Client          | ClientRead          | update table1 set id=2 where id=1;12784 | {}               | Activity        | WalSenderMain       | START_REPLICATION 1/4B000000 TIMELINE 216725 | {16717}          | Lock            | transactionid       | update table1 set id=2 where id=1;16730 | {}               |                 |                     | select pid,pg_blocking_pids(pid),wait_event_type,wait_event,query
from pg_stat_activity ;12776 | {}               | Activity        | BgWriterHibernate   |12779 | {}               | Activity        | ArchiverMain        |12775 | {}               | Activity        | CheckpointerMain    |12777 | {}               | Activity        | WalWriterMain       |
(10 rows)

说明:

①通过查询可以发现,当前update语句的pid为16725,被pid为16717的update语句阻塞。

②pg_blocking_pids函数: 返回阻止具有指定进程 ID 的服务器进程获取锁的会话的进程 ID 数组,如果没有此类服务器进程或未被阻止,则返回空数组。

频繁调用此函数可能会对数据库性能产生一些影响,因为它需要在短时间内对锁管理器的共享状态进行独占访问。

2、通过系统表pg_class和pg_locks查找表对应锁

highgo=# select oid,relname from pg_class where relname='table1';oid  | relname
-------+---------16447 | table1
(1 row)highgo=# select locktype,database,pid,relation ,mode from pg_locks where relation='16447';locktype | database |  pid  | relation |       mode
----------+----------+-------+----------+------------------relation |    14743 | 16717 |    16447 | RowExclusiveLockrelation |    14743 | 16725 |    16447 | RowExclusiveLocktuple    |    14743 | 16725 |    16447 | ExclusiveLock
(3 rows)

3、使用pg_terminate_backend函数结束阻塞语句。

highgo=# select pg_terminate_backend('16717');pg_terminate_backend
----------------------t
(1 row)

注意事项:

①超级用户或已授予 pg_signal_backend 调用角色的角色的成员可以执行该函数。

②该函数会终止进程,一旦进程被终止,未完成的事务可能会回滚,并且可能会丢失数据。

4、再次查看已无阻塞,可以执行需要执行的sql

highgo=# select locktype,database,pid,relation ,mode from pg_locks where relation='16447';locktype | database | pid | relation | mode
----------+----------+-----+----------+------
(0 rows)
highgo=# select pid,pg_blocking_pids(pid),wait_event_type,wait_event,query from pg_stat_activity ;pid  | pg_blocking_pids | wait_event_type |     wait_event      |                                           query-------+------------------+-----------------+---------------------+-------------------------------------------------------------------
------------------------12781 | {}               | Activity        | LogicalLauncherMain |12778 | {}               | Activity        | AutoVacuumMain      |12784 | {}               | Activity        | WalSenderMain       | START_REPLICATION 1/4B000000 TIMELINE 216730 | {}               |                 |                     | select pid,pg_blocking_pids(pid),wait_event_type,wait_event,query
from pg_stat_activity ;12776 | {}               | Activity        | BgWriterHibernate   |12779 | {}               | Activity        | ArchiverMain        |12775 | {}               | Activity        | CheckpointerMain    |12777 | {}               | Activity        | WalWriterMain       |
(9 rows)
http://www.dtcms.com/a/195499.html

相关文章:

  • 【Linux】iptables 命令详解
  • dify知识库支持图文回复实践
  • STM32H743IIT6_ADC采集误差分析与ADC_DMA
  • Stainer Chain的镜像对称性的充分必要条件
  • 建筑设计单位的数据安全如何保护?天锐蓝盾针对性解决方案
  • 【AI模型部署】
  • Linux-进程概念(一)
  • Web-CSS入门
  • 优雅使用Gunicorn进程管理FastAPI
  • buuctf Crypto-摩丝1
  • 矫平机技术新维度:材料科学、数字孪生与零缺陷制造
  • QML 动画控制、顺序动画与并行动画
  • 【Linux网络】网络套接字编程
  • Python循环控制
  • 模板分享:网络最小费用流
  • 费曼技巧及提高计划
  • c++,linux,多线程编程详细介绍
  • 2025 Adobe Acrobat DC安装教程
  • 天能股份SAP系统整合实战:如何用8个月实现零业务中断的集团化管理升级
  • Python模块化编程进阶指南:从基础到工程化实践
  • 7 个正则化算法完整总结
  • Executors类详解
  • 使用 ESP32 驱动 ±12V 压电无源蜂鸣器(NPN 三极管 + PWM 控制驱动电路)
  • arxiv等开源外文书数据的获取方式
  • 安全生产调度管理系统的核心功能模块
  • Multimodal models —— CLIP,LLava,QWen
  • 信息收集工具
  • 【问题排查】easyexcel日志打印Empty row!
  • RTK哪个品牌好?2025年RTK主流品牌深度解析
  • 跳转传参的使用