PostgreSQL死锁问题解决

news/2024/5/20 11:36:18 标签: PostgreSQL, 死锁

一、概述

二、postgreSQL死锁解决

1、查询正在执行的SQL

看当前这个数据库里有哪些sql正在执行,或是刚刚执行结束,从这里可以分析是否存在资源竞争。

-- 查询正在进行的SQL操作
select * from pg_stat_activity;

上面查询结果中:

  • pid就是ACTIVITY的唯一标识
  • state就是活动状态
  • query就是正在执行的sql语句
  • query_start就是开始执行的时间

2、查询表锁

(1)查询死锁

select 
	* 
from 
	pg_stat_activity
where 
	datname = 'vcloud' 
AND wait_event_type = 'Lock'

(2)查询可能被锁的表

select * from pg_locks where relation= (select oid from pg_class where relname='可能锁表了的表');

3、取消函数和中断函数

-- 取消后台操作,回滚未提交事物 
select pg_cancel_backend(上面查到的pid)

-- 中断session,回滚未提交事物(pg_stat_activity表state字段中值为idle in transaction的,可以使用下面的中断函数解锁)
select pg_terminate_backend(上面查到的pid)

4、查询阻塞的sql

-- 查询阻塞的sql(死锁了,没有执行通过的sql)
select 
	pg_stat_activity.*,
	pg_locks.locktype,
	pg_locks.database,
	pg_locks.pid,
	pg_locks.mode,
	pg_locks.relation,
	pg_class.relname
from 
	pg_stat_activity,pg_locks,pg_class
where
	pg_stat_activity.pid=pg_locks.pid
and pg_locks.relation=pg_class.oid
and pg_stat_activity.waiting='t'
and upper(pg_class.relname)='AS_ASSETS_EXT'
SELECT
	w1.pid AS 等待进程,
	w1.MODE AS 等待锁模式,
	w2.usename AS 等待用户,
	w2.query AS 等待会话,
	b1.pid AS 锁的进程,
	b1.MODE 锁的锁模式,
	b2.usename AS 锁的用户,
	b2.query AS 锁的会话,
	b2.application_name 锁的应用,
	b2.client_addr 锁的 IP地址,
	b2.query_start 锁的语句执行时间 
FROM
	pg_locks w1
	JOIN pg_stat_activity w2 ON w1.pid = w2.pid
	JOIN pg_locks b1 ON w1.transactionid = b1.transactionid 
	AND w1.pid != b1.pid
	JOIN pg_stat_activity b2 ON b1.pid = b2.pid 
WHERE
	NOT w1.GRANTED;

三、参考

在Postgresql数据库中查询正在进行的SQL操作
https://blog.csdn.net/weixin_40991510/article/details/87255621

PostgreSQL 修改表结构卡住不动
https://blog.csdn.net/qq_43458533/article/details/120438960

postgresql 死锁问题解决记录
https://blog.csdn.net/weixin_33905756/article/details/92021743


http://www.niftyadmin.cn/n/347726.html

相关文章

深度学习基础入门篇[9.2]:卷积之1*1 卷积(残差网络)、2D/3D卷积、转置卷积数学推导、应用实例

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化…

Unity自带的对象池——UnityEngine.Pool

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 简介使用总结版权声明 简介 之前对象池都是自己写,现在unity的API自带对象池了,UnityEngine.Pool 官方文档:https://docs.unity…

Spring 如何处理请求参数和表单数据

当我们开发 Web 应用程序时,处理请求参数和表单数据是必不可少的。Spring MVC 是一个流行的 Java Web 框架,提供了多种方式来处理请求参数和表单数据。本文将介绍 Spring MVC 中处理请求参数和表单数据的常用方式,并提供相应的代码示例。 处…

Oracle数据库中了locked1勒索病毒,用友nchome配置文件损坏该如何解除

随着互联网技术的不断发展,网络安全问题也越来越受到人们的关注。其中,勒索病毒是一种比较常见的网络安全威胁。最近很多集团企业在使用Oracle数据库的过程中,遭遇到了locked1勒索病毒的攻击,导致企业的用友nchome配置文件损坏&am…

简单实用的18个JS代码技巧

记录一些简单实用的JS代码技巧 1.获取数据类型 封装一个公共函数来获取变量的数据类型 const getType (value) > {const match Object.prototype.toString.call(value).match(/ (\w)]/)return match[1].toLocaleLowerCase() }getType() // undefined getType({}}) // o…

4-【斐波那契数列模型】LeetCode746-使用最小花费爬楼梯

题目 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。 示例 1&a…

【谷粒商城笔记】2. 创建项目与运行

1. 创建微服务项目 共分为下面五个 商品服务product 存储服务ware 订单服务order 优惠券服务coupon 用户服务member 1.1 新建github/gitee项目 首先去github新建项目 在IDEA中导入项目 从版本控制(Version Control)新建Project 选择路径和git链接 1.2 创建微服务 新建…

面了一个测试工程师要求月薪23K,总感觉他藏了很多面试题...

最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…