PG 锁类型、级别、死锁解决

文章目录

    • 锁类型
        • ACCESS SHARE
        • ROW SHARE
        • ROW EXCLUSIVE
        • SHARE UPDATE EXCLUSIVE
        • SHARE
        • SHARE ROW EXCLUSIVE
        • EXCLUSIVE
        • ACCESS EXCLUSIVE
    • 死锁查询
    • 死锁处理
        • 死锁测试
            • Session A
            • Session B
            • Session C
            • Session D
            • Session E
            • 原因
    • 结论

锁类型

在这里插入图片描述

ACCESS SHARE

1、SELECT产生的锁
2、与ACCESS EXCLUSIVE冲突

ROW SHARE

1、SELECT FOR UPDATE 、SELECT FOR SHARE 产生的锁
2、与EXCLUSIVE 、ACCESS EXCLUSIVE冲突

ROW EXCLUSIVE

1、UPDATE, DELETE、与INSERT产生的锁
2、与SHARE、SHARE ROW EXCLUSIVE,、EXCLUSIVE、ACCESS EXCLUSIVE冲突

SHARE UPDATE EXCLUSIVE

1、VACUUM (without FULL)、ANALYZE、CREATE INDEX CONCURRENTLY、CREATE STATISTICS、COMMENT ON、 ALTER TABLE VALIDATE 、 other ALTER TABLE variants 产生的锁
2、与SHARE UPDATE EXCLUSIVE、SHARE、SHARE ROW EXCLUSIVE、EXCLUSIVE、ACCESS EXCLUSIVE冲突

SHARE

1、CREATE INDEX产生的锁
2、与ROW EXCLUSIVE、SHARE UPDATE EXCLUSIVE、SHARE ROW EXCLUSIVE、EXCLUSIVE、ACCESS EXCLUSIVE冲突

SHARE ROW EXCLUSIVE

1、CREATE COLLATION、CREATE TRIGGER、and many forms of ALTER TABLE产生的锁
2、与ROW EXCLUSIVE、SHARE UPDATE EXCLUSIVE、SHARE、SHARE ROW EXCLUSIVE、EXCLUSIVE、and ACCESS EXCLUSIVE 冲突

EXCLUSIVE

1、刷新物化视图REFRESH MATERIALIZED VIEW CONCURRENTLY产生的锁
2、与ROW SHARE、ROW EXCLUSIVE、SHARE UPDATE EXCLUSIVE、SHARE、SHARE ROW EXCLUSIVE、EXCLUSIVE、ACCESS EXCLUSIVE冲突

ACCESS EXCLUSIVE

1、DROP TABLE、TRUNCATE、REINDEX、CLUSTER、VACUUM FULL、REFRESH MATERIALIZED VIEW (without CONCURRENTLY)产生的锁
2、与ACCESS SHARE、ROW SHARE、ROW EXCLUSIVE、SHARE UPDATE EXCLUSIVE、SHARE、SHARE ROW EXCLUSIVE、EXCLUSIVE、ACCESS EXCLUSIVE冲突

死锁查询

with    
t_wait as    
(    select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple,a.classid,a.granted,   a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a.transactionid,a.fastpath,    b.state,b.query,b.xact_start,b.query_start,b.usename,b.datname,b.client_addr,b.client_port,b.application_name   from pg_locks a,pg_stat_activity b where a.pid=b.pid and not a.granted   
),   
t_run as   
(   select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple,a.classid,a.granted,   a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a.transactionid,a.fastpath,   b.state,b.query,b.xact_start,b.query_start,b.usename,b.datname,b.client_addr,b.client_port,b.application_name   from pg_locks a,pg_stat_activity b where a.pid=b.pid and a.granted   
),   
t_overlap as   
(   select r.* from t_wait w join t_run r on   (   r.locktype is not distinct from w.locktype and   r.database is not distinct from w.database and   r.relation is not distinct from w.relation and   r.page is not distinct from w.page and   r.tuple is not distinct from w.tuple and   r.virtualxid is not distinct from w.virtualxid and   r.transactionid is not distinct from w.transactionid and   r.classid is not distinct from w.classid and   r.objid is not distinct from w.objid and   r.objsubid is not distinct from w.objsubid and   r.pid <> w.pid   )    
),    
t_unionall as    
(    select r.* from t_overlap r    union all    select w.* from t_wait w    
)    
select locktype,datname,relation::regclass,page,tuple,virtualxid,transactionid::text,classid::regclass,objid,objsubid,   
string_agg(   
'Pid: '||case when pid is null then 'NULL' else pid::text end||chr(10)||   
'Lock_Granted: '||case when granted is null then 'NULL' else granted::text end||' , Mode: '||case when mode is null then 'NULL' else mode::text end||' , FastPath: '||case when fastpath is null then 'NULL' else fastpath::text end||' , VirtualTransaction: '||case when virtualtransaction is null then 'NULL' else virtualtransaction::text end||' , Session_State: '||case when state is null then 'NULL' else state::text end||chr(10)||   
'Username: '||case when usename is null then 'NULL' else usename::text end||' , Database: '||case when datname is null then 'NULL' else datname::text end||' , Client_Addr: '||case when client_addr is null then 'NULL' else client_addr::text end||' , Client_Port: '||case when client_port is null then 'NULL' else client_port::text end||' , Application_Name: '||case when application_name is null then 'NULL' else application_name::text end||chr(10)||    
'Xact_Start: '||case when xact_start is null then 'NULL' else xact_start::text end||' , Query_Start: '||case when query_start is null then 'NULL' else query_start::text end||' , Xact_Elapse: '||case when (now()-xact_start) is null then 'NULL' else (now()-xact_start)::text end||' , Query_Elapse: '||case when (now()-query_start) is null then 'NULL' else (now()-query_start)::text end||chr(10)||    
'SQL (Current SQL in Transaction): '||chr(10)||  
case when query is null then 'NULL' else query::text end,    
chr(10)||'--------'||chr(10)    
order by    (  case mode    when 'INVALID' then 0   when 'AccessShareLock' then 1   when 'RowShareLock' then 2   when 'RowExclusiveLock' then 3   when 'ShareUpdateExclusiveLock' then 4   when 'ShareLock' then 5   when 'ShareRowExclusiveLock' then 6   when 'ExclusiveLock' then 7   when 'AccessExclusiveLock' then 8   else 0   end  ) desc,   (case when granted then 0 else 1 end)  
) as lock_conflict  
from t_unionall   
group by   
locktype,datname,relation,page,tuple,virtualxid,transactionid::text,classid,objid,objsubid ; 

死锁处理

死锁测试

Session A

在这里插入图片描述

Session B

在这里插入图片描述

Session C

在这里插入图片描述

Session D

在这里插入图片描述

Session E

查询死锁情况
在这里插入图片描述

原因

truncate操作触发ACCESS EXCLUSIVE,导致不能查询,所以遇到死锁,可以按锁的级别从高往低释放

查询正常

结论

发生死锁,可以按锁的级别从高往低释放

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38409.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle死锁问题: enq: TX - row lock contention

前言 这篇文章也是记录近期遇到的问题以及从中学到的知识 &#xff0c;近期一直在救火&#xff0c;有些问题自认为还是挺有代表性的&#xff0c;有兴趣的话再继续向下看 问题现象 线上反馈&#xff0c;执行批量处理EXCEL数据时&#xff0c;系统一直卡在进度滚动条界面。处理任务…

Oracle 出现锁表了,如何处理

出现锁表的情况很多种&#xff0c;但是大部分情况都是更新表&#xff0c;然后并没有提交&#xff0c;导致数据库的表被锁的情况。处理方式也比较简单&#xff0c;如下&#xff1a; 查询是否有表锁&#xff1a; select count(1) count from v$locked_object; 如果查询出来的数量…

短文重复性检测综述,谷歌文本重复性检测: Detect duplicate content like Google

文本重复性检测一直是NLP等领域非常重要的一项研究工作&#xff0c;今天 #paperClub# 给大家翻译一下"Detect duplicate content like Google"。 重复的内容是影响网站排名的最重要的负面因素之一。这就是为什么近重复检测 (NDD) 在任何 SEO 应执行的任务之间占据重要…

词云图:统计一个文本中词出现的次数。

在进行词云图的创作时&#xff0c;统计词语的出现频率是非常有意义的&#xff0c;可以依据词语频率的高低来判断词云图是否准确。选择小说中的某一章节&#xff0c;利用程序统计词语出现的次数。 程序如下&#xff1a; # -*- codeing utf-8 -*- # Time : 2021/12/12 1:21 # A…

chatgpt赋能python:Python词语分类

Python词语分类 Python是一种高级编程语言&#xff0c;它有很多词语&#xff0c;其中一些可能令你在学习Python时感到困惑。在这篇文章中&#xff0c;我们将探讨Python词语的分类&#xff0c;以帮助您更好地理解Python编程。 变量与数据类型 在Python中&#xff0c;变量用于…

DaVinci:Camera Raw(ARRI)

本文主要介绍 ARRI 的 Raw 格式素材相关的 Camera Raw 参数。 解码质量 Decode Quality 解码质量决定了图像解拜耳之后所呈现的素质&#xff0c;也与最终的输出息息相关。 默认为“使用项目设置” Use project setting&#xff0c;表示使用项目设置对话框中的“Camera RAW”解码…

DaVinci_Resolve_Studio_18.1.1达芬奇图文安装教程及下载

DaVinci Resolve最大的特点是&#xff0c;将剪辑、调色、视觉特效、动态图形和音频后期制作融于一身&#xff0c;它采用美观新颖的界面设计&#xff0c;易学易用&#xff0c;能让新手用户快速上手操作&#xff0c;还能提供专业人士需要的强大性能。 DaVinci Resolve 18是一次重…

davinci使用笔记(1)

第一节主要介绍达芬奇17的各个界面以及第一次使用的注意事项和主要设置。 这是达芬奇打开出现的界面&#xff0c;如图这是一个项目工程界面&#xff0c;我们可以在这里新建新的项目和和对项目进行分类&#xff0c;在这个界面右下角有三个按钮&#xff0c;其中第二个按钮是新建文…

达芬奇调色DaVinci Resolve Studio18v18.1.4 2023中文版更新发布,支持intel/M1/M2芯片

达芬奇是世界上唯一在单一软件环境中进行剪辑、调色、视觉效果、图形和音频后期处理的解决方案。其现代、时尚的界面简单直观&#xff0c;对于新手和有经验的用户来说都足够了。 DaVinci Resolve 无需掌握多个应用程序或在不同系统之间切换&#xff0c;极大地简化了您的创作过…

TI DaVinci(达芬奇)入门

&#xff08;转载来自 德州仪器半导体技术&#xff08;上海&#xff09;有限公司 通用DSP 技术应用工程师 崔晶 德州仪器&#xff08;TI&#xff09;的第一颗达芬奇&#xff08;DaVinci&#xff09;芯片&#xff08;处理器&#xff09;DM6446已经问世快三年了。继DM644x之后&am…

davinci 达芬奇BI工具

Davinci 是一个 DVAAS&#xff08;Data Visualization as a Service&#xff09;平台解决方案&#xff0c;面向业务人员/数据工程师/数据分析师/数据科学家&#xff0c;致力于提供一站式数据可视化解决方案。既可作为公有云/私有云独立部署使用&#xff0c;也可作为可视化插件集…

ChatGPT3.0 text-davinci-003 表现诡异

最近想试用一下通过API调用ChatGPT&#xff0c;在测试 gpt-3.5-turbo 的时候遇到了“openai.error.InvalidRequestError: This is not a chat model and thus not supported in the v1/chat/completions endpoint. Did you mean to use v1/completions? ”的问题。 所以该尝试…

中国元宇宙科技有限公司+《星云虚境》+AI虚拟数字人+chatgpt

随着人工智能、虚拟现实等技术的不断发展&#xff0c;中国元宇宙科技有限公司计划推出一款名为《星云虚境》的虚拟数字人平台。该平台将采用AIchatgpt等技术&#xff0c;为用户提供更加真实、智能的虚拟人体交互体验&#xff0c;为未来的数字化生活带来新的可能性。 未来&…

辅助现实?aR?AR?进入元宇宙,这个概念得搞懂

1 什么是辅助现实&#xff1f; 辅助现实&#xff08;aR&#xff0c;assisted Reality&#xff09;这个词在最近的一些AR眼镜的新品发布会频繁出现。那这辅助现实又是什么&#xff0c;与增强现实之间有什么关系呢&#xff1f; 其实&#xff0c;辅助现实可以说是增强现实里面的一…

元宇宙系列之AI虚拟人:“人”潮汹涌 探路未来

尽管元宇宙尚处不断扩充定义的进程中&#xff0c;但市场对于虚拟人在其中扮演关键要素已达成一定共识。我们认为&#xff0c;从中短期视角看&#xff0c;虚拟人相关技术逐步落地&#xff0c;应用场景持续拓宽&#xff0c;或为元宇宙概念下技术、内容及产业融合升级的初步尝试&a…

ChatGPT和AI会重燃中国的虚拟宇宙吗?

随着像 Meta 这样的科技巨头关闭他们的元宇宙部门以支持人工智能 &#xff08;AI&#xff09; 的努力——尽管他们认为元宇宙仍将是其主要产品——观众们相信&#xff0c;以前备受赞誉的虚拟生态系统已经被 AI 淘金热从互联网宝座上推倒了。 人工智能的利润潜力在今年上半年吸…

元宇宙虚拟人迎来高峰期,哪个是你的最爱?

虚拟人从最初的不温不火&#xff0c;到现在步入“出生高峰期”&#xff0c;元宇宙可以说是功不可没。 此前&#xff0c;量子位发布了《虚拟数字人深度产业报告》&#xff0c;报告显示&#xff0c;到2030年我国虚拟数字人整体市场规模将达到2700亿元。其中&#xff0c;“身份型…

WebAR也是元宇宙的一种? #geenee.ar 快速上手制作 AR 应用

Mixlab AR & VR 是构建元宇宙应用的热点 “接口”。前期推文介绍了 Web 端的快捷高效的 VR 创作工具 Styly &#xff0c;AR 创作也有类似的简易工具吗&#xff1f; 知识库 有社群成员推荐了一款 Web AR 工具 Geenee。该工具是一个无代码平台&#xff0c;即使是非技术创作者…

解密通往元宇宙的三大入口,VR先上AR紧跟,但脑机接口才是未来

来源: 智东西 编辑&#xff1a;智东西内参 VR、AR和脑机接口&#xff0c;谁是人类通往元宇宙的合适入口&#xff1f; VR/AR/脑机接口是集合了微显示、传感器、芯片和算法等多项技术在内的下一代人机交互平台。回顾整个人机交互发展历程&#xff0c;我们看到人机交互的指令输入形…

元宇宙,现实与虚拟交互的新一代互联网?

在家中&#xff0c;你可以到访埃及的五大遗迹或者中国的兵马俑&#xff0c;当然全球的著名景点可以玩个遍&#xff0c;和真实体验无异。 在一个可互操作的协作空间&#xff0c;建筑师、工程师和设计师在一虚拟世界上共同进行空间设计&#xff0c;随意进出虚拟与现实世界。 同样…