返回顶部
首页 > 资讯 > 数据库 >查找和杀掉postgresql堵塞的会话
  • 923
分享到

查找和杀掉postgresql堵塞的会话

2024-04-02 19:04:59 923人浏览 泡泡鱼
摘要

查找和杀掉postgresql堵塞的会话1.创建视图,可以随时使用:CREATE VIEW pg_blocking AS SELECTblocked_locks.pid AS blocked_pid

查找和杀掉postgresql堵塞的会话
1.创建视图,可以随时使用:
CREATE VIEW pg_blocking AS SELECT
blocked_locks.pid AS blocked_pid,
blocked_activity.usename AS blocked_user,
blocking_locks.pid AS blocking_pid,
blocking_activity.usename AS blocking_user,
blocked_activity. QUERY AS blocked_statement,
blocking_activity. QUERY AS current_statement_in_blocking_process
FROM
pg_catalog.pg_locks blocked_locks
JOIN pg_catalog.pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid
JOIN pg_catalog.pg_locks blocking_locks ON blocking_locks.locktype = blocked_locks.locktype
AND blocking_locks. DATABASE IS NOT DISTINCT
FROM
blocked_locks. DATABASE
AND blocking_locks.relation IS NOT DISTINCT
FROM
blocked_locks.relation
AND blocking_locks.page IS NOT DISTINCT
FROM
blocked_locks.page
AND blocking_locks.tuple IS NOT DISTINCT
FROM
blocked_locks.tuple
AND blocking_locks.virtualxid IS NOT DISTINCT
FROM
blocked_locks.virtualxid
AND blocking_locks.transactionid IS NOT DISTINCT
FROM
blocked_locks.transactionid
AND blocking_locks.classid IS NOT DISTINCT
FROM
blocked_locks.classid
AND blocking_locks.objid IS NOT DISTINCT
FROM
blocked_locks.objid
AND blocking_locks.objsubid IS NOT DISTINCT
FROM
blocked_locks.objsubid
AND blocking_locks.pid != blocked_locks.pid
JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
WHERE
NOT blocked_locks.GRANTED;
查询创建的视图查询堵塞:
select  * from  pg_blocking;
2.杀掉查出的阻塞会话:
kill有两种方式,第一种是:
SELECT pg_cancel_backend(PID);  ###取消一个正在执行的sql
第二种是:
SELECT pg_terminate_backend(PID);  ###终止一个后台服务进程,同时释放此后台服务进程的资源。

这两个函数的区别是:pg_cancel_backend()函数实际上是给正在执行的SQL任务配置一个取消标志,正在执行的任务是在合适的时候检测到此标志后主动退出;但如果这个任务没有主动检测到这个标志,则该任务就无法正常退出,这时需要使用pg_terminate_backend()命令在终止SQL的执行。
通常是先查询pg_stat_activity,试图找出长时间运行的SQL,然后进行终止,也可以批量终止回话:
SELECT  'SELECT pg_terminate_backend('||blocking_pid||');' from pg_blocking;

您可能感兴趣的文档:

--结束END--

本文标题: 查找和杀掉postgresql堵塞的会话

本文链接: https://lsjlt.com/news/49908.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 查找和杀掉postgresql堵塞的会话
    查找和杀掉postgresql堵塞的会话1.创建视图,可以随时使用:CREATE VIEW pg_blocking AS SELECTblocked_locks.pid AS blocked_pid...
    99+
    2024-04-02
  • Oracle查询死锁和杀死会话的命令
    这篇文章主要介绍“Oracle查询死锁和杀死会话的命令”,在日常操作中,相信很多人在Oracle查询死锁和杀死会话的命令问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Orac...
    99+
    2024-04-02
  • Oracle RAC环境下定位并杀掉最终阻塞的会话方法是什么
    本篇内容介绍了“Oracle RAC环境下定位并杀掉最终阻塞的会话方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读...
    99+
    2024-04-02
  • PostgreSQL中的连接限制和会话管理如何配置
    在PostgreSQL中,连接限制和会话管理可以通过两种方式进行配置:通过修改PostgreSQL的配置文件和通过使用数据库管理工具...
    99+
    2024-04-02
  • 在 PostgreSQL 和 MySQL 中的所有表中查找特定数据
    使用大型数据库时,您可能会发现自己需要在多个表和列中查找特定值。这可能是一项具有挑战性的任务,尤其是当您不知道到底该去哪里查看时。幸运的是,有一些方法可以在 postgresql 和 ...
    99+
    2024-07-26
    mysql
  • 如何根据会话查询当前和历史执行过的sql
    如何根据会话查询当前和历史执行过的sql,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。分享两个脚本,主要是通过Oracle会话sid来查询...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作