DBA急救手册:拆解Oracle死锁图,ORA-00060错误秒级定位终极指南

关于“死锁图”(Deadlock Graph)的一点浅见

当 Oracle 检测到死锁时,检测到死锁的会话中的当前 SQL 将被取消,并执行“语句级回滚”,以释放资源并避免阻塞所有活动。

检测到死锁的会话仍然“存活”,并且事务的其余部分仍然处于活动状态。如果您在该会话中重复上次(被取消的)操作,那么您将再次遇到死锁。

当检测到此类死锁时,会生成一个trace文件,其中包含“死锁图”(以及其他有用信息)。

通过对大量服务请求的审查,我们发现最常见的死锁类型可以通过一个“特征”死锁图来识别,该图可用于确定所遇到的死锁的“类型”。
本文将展示每种类型的示例,以便调查和解决工作能够沿着正确的方向进行。

这篇文章将说明如何利用由 ORA-00060 错误生成的“死锁图”(Deadlock Graph)来识别根本问题。
一个典型的死锁图可能看起来像这样:


为了区分不同的类型,我们采用了锁类型以及持有者和等待者所持有的/等待的模式,并以此为每个类型创建了一个签名。
例如,前面的图表显示了以下特征:

  1. 死锁图中多于 1 行
  1. 所有锁类型均为排他锁(TX)
  2. 持有者和等待者的锁模式均为 X(独占模式,模式 6)

通过关注图表中的这些特定特征:


将给我们以下类型(这通常是应用程序死锁):

TX X X Tx x x
TX X X Tx x x

请注意,对于死锁类型识别而言,“关键签名”中最重要的部分是锁类型以及它所请求的模式。主要类型在下表中已突出显示。
最常见的类型有:

Oracle 锁模式有

0 - none 0—无
1 - null (NULL) 1 - null (null)
2 - 行共享,也称为子共享表锁(SS)
3 - 行排他表锁,也称为子排他表锁(SX)
4 - 共享表锁(S)
5 - 共享行排他锁,也称为共享子排他表锁(SSX)
6 -排他(X)

注意:通常我们会看到应用程序死锁的“特征”与其他特征之一的组合,而不是“典型”的重复特征。例如,您可能会看到类似这样的内容:

死锁图---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name                    process session holds waits  process session holds waits
TM-XXXXXXXX-00000000       11      333     SX                      22        44          SX     SSX
TX-XXXXXXXX-XXXXXXXX       22      44      X                        11        333                    X

这是“应用程序死锁”和“外键(FK)约束缺失索引”死锁的组合。在这种情况下,建议先解决非“TX X X”的症状,因为不太常见的 FK/ITL/位图签名更有可能是根本原因,而不是应用程序死锁。

请注意,trace 文件包含各种相关信息,这些信息可能与问题有关,也可能无关,这取决于死锁的类型。

例如,在“Rows Waited on”部分,“dictionary objn”值在某些情况下可用于识别相关对象,但在其他情况下可能指向完全不相关的信息。
如果信息可用,会在相关部分注明,否则请勿依赖。

关于锁定模式和锁定的更多内容请见下文:

Oracle® Database Concepts
12c Release 1 (12.1) 
E17633-20
Chapter 9 Data Concurrency and Consistency
https://docs.oracle.com/database/121/CNCPT/consist.htm#CNCPT020

参考文档

Document 1552194.1 ORA-00060 Deadlock Graph Not Matching any Examples: Suggested Next Steps
Document 60.1 Troubleshooting Assistant: Oracle Database ORA-00060 Errors on Single Instance (Non-RAC) Diagnosing Using Deadlock Graphs in ORA-00060 Trace Files
How to Identify ORA-00060 Deadlock Types Using Deadlock Graphs in Trace (Doc ID 1507093.1)
Document 1559695.1 How to Diagnose Different ORA-00060 Deadlock Types Using Deadlock Graphs in Trace 

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

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

相关文章

C++中的默认函数学习

今天在学习QT别人的项目时看到有个函数在声明和调用时参数个数不一样,查了下是c中的一种函数类型,这个类型的函数可以让代码更简洁、灵活。定义:在函数声明时,给某些参数预先设定一个默认值。调用函数时,如果省略这些参…

HBase分片技术实现

HBase分片技术实现概述HBase是基于Hadoop的分布式、可扩展的NoSQL数据库,采用列族存储模型。HBase的分片机制通过Region自动分割和负载均衡实现水平扩展,支持PB级数据存储和高并发访问。HBase架构核心组件HMaster: 集群管理节点,负责Region分…

Python爬虫实战:研究awesome-python工具,构建技术资源采集系统

1. 引言 1.1 研究背景 Python 凭借语法简洁、生态丰富等特点,已成为全球最受欢迎的编程语言之一。截至 2024 年,PyPI(Python Package Index)上的第三方库数量已突破 45 万个,涵盖从基础工具到前沿技术的全领域需求。然而,海量资源也带来了 "信息过载" 问题 —…

【实时Linux实战系列】实时视频监控系统的开发

随着技术的不断发展,实时视频监控系统在安防、交通管理、工业自动化等领域得到了广泛应用。实时Linux系统因其高效的实时性和稳定性,成为开发高性能视频监控系统的理想选择。掌握基于实时Linux的视频监控系统开发技能,对于开发者来说不仅能够…

力扣-11.盛最多水的容器

题目链接 11.盛最多水的容器 class Solution {public int maxArea(int[] height) {int res 0;for (int i 0, j height.length - 1; i < j; ) {res Math.max(res, Math.min(height[i], height[j]) * (j - i));if (height[i] < height[j]) {i;} else {j--;}}return r…

大型音频语言模型论文总结

大型音频语言模型&#xff08;Large Audio Language Model, LALM&#xff09;是一类基于深度学习的智能系统&#xff0c;专门针对音频信号&#xff08;如语音、音乐、环境声等&#xff09;进行理解、生成、转换和推理。它借鉴了大型语言模型&#xff08;LLM&#xff09;的“预训…

如何解决网页视频课程进度条禁止拖动?

function skip() {let video document.getElementsByTagName(video)for (let i0; i<video.length; i) {video[i].currentTime video[i].duration} } setInterval(skip,6666)无法拖动视频进度。 使用F12启动调试模式。 function skip() {let video document.getElements…

基于deepSeek的流式数据自动化规则清洗案例【数据治理领域AI带来的改变】

随着AI大模型的大量普及&#xff0c;对于传统代码模式产生了不小的影响&#xff0c;特别是对于大数据领域&#xff0c;传统的规则引擎驱动的数据治理已经无法满足数据增长带来的治理需求。因此主动型治理手段逐渐成为主流&#xff0c;因此本文介绍一个基于deepSeek的流式数据自…

【论文分析】【Agent】SEW: Self-Evolving Agentic Workflows for Automated Code Generatio

1.论文信息标题&#xff1a;SEW: Self-Evolving Agentic Workflows for Automated Code Generatio&#xff1a;用于自动代码生成的自我进化的代理工作流程收录的会议/期刊&#xff1a;作者信息&#xff1a;arxiv&#xff1a;&#x1f517;github网站&#xff1a;&#x1f517;g…

MCP 协议:AI 时代的 “万能转接头”,从 “手动粘贴” 到 “万能接口”:MCP 协议如何重构 AI 工具调用规则?

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》&#xff08;跟我一起学人工智能&#xff09;【陈敬雷编著】【清华大学出版社】 清华《GPT多模态大模型与AI Agent智能体》书籍配套视频课程【陈敬雷…

VUE本地构建生产环境版本用于局域网访问

&#x1f680;构建生产环境版本用于局域网访问&#xff08;适用于 Vue 项目&#xff09; 在开发 Vue 项目的过程中&#xff0c;很多人使用 yarn serve 启动开发服务器进行调试。但开发模式存在以下问题&#xff1a; 访问速度慢&#xff0c;特别是局域网访问&#xff1b;热更新频…

【密码学】5. 公钥密码

这里写自定义目录标题公钥密码密码学中的常用数学知识群、环、域素数和互素数模运算模指数运算费尔马定理、欧拉定理、卡米歇尔定理素性检验欧几里得算法中国剩余定理&#xff08;CRT&#xff09;离散对数二次剩余循环群循环群的选取双线性映射计算复杂性公钥密码体制的基本概念…

VINS-Fusion+UWB辅助算法高精度实现

VINS-FusionUWB辅助算法高精度实现 摘要 本文详细介绍了基于VINS-Fusion框架结合UWB辅助的高精度定位算法实现。通过将视觉惯性里程计(VIO)与超宽带(UWB)测距技术融合&#xff0c;显著提高了复杂环境下的定位精度和鲁棒性。本文首先分析了VINS-Fusion和UWB各自的技术特点&#…

新手向:Python实现简易计算器

你是否一直想学习编程但不知从何入手&#xff1f;这篇详细的教程将带领完全零基础的读者&#xff0c;循序渐进地掌握如何用Python实现一个简易计算器。我们将从最基本的编程概念讲起&#xff0c;确保每一位初学者都能跟上进度。准备工作在开始之前&#xff0c;你需要&#xff1…

区块链赋能供应链金融:解决信任与效率问题

摘要: 随着全球经济一体化和数字化进程的加速,供应链金融在实体经济发展中的作用愈发关键。然而,传统供应链金融面临着信任机制薄弱和效率低下等诸多挑战。区块链技术凭借其去中心化、不可篡改、可追溯等特性,为供应链金融带来了创新的解决方案,能够有效解决信任与效率问题…

无人机 × 巡检 × AI识别:一套可复制的超低延迟低空视频感知系统搭建实践

✳️ 引言&#xff1a;低空感知&#xff0c;正重构数字世界的“底层感官接口” 随着低空经济进入规模化部署阶段&#xff0c;感知系统不再是“任务辅助”&#xff0c;而是演变为支撑智能化运行的基础设施核心模块。从电力巡检的高空细节识别&#xff0c;到城市安防的区域态势掌…

STM32U5 外部中断不响应问题分析

关键字&#xff1a; EXTI 1. 问题背景 客户的终端客户反馈产品会有偶发性的功能异常。问题比较难以复现。 经过调查&#xff0c;在 BOOT 程序跳转到 APP1 程序中时相对比较容易复现问题。查看客户代码&#xff0c;发现客户在 BOOT 程序中会对 EXTI 进行初始化&#xff0c;跳…

17.Linux :selinux

Linux &#xff1a; selinux DAC vs MAC 对比模型控制方式决策依据安全强度DAC自主访问控制文件所有者的权限设置低MAC强制访问控制系统级安全策略极高SELinux的核心原理是基于 强制访问控制&#xff08;MAC&#xff09; 模型&#xff0c;通过为系统资源打上安全标签并制定精细…

如何在不停机的情况下,将MySQL单库的数据迁移到分库分表的架构上?

在业务高速发展的过程中&#xff0c;单库单表的MySQL架构往往会成为系统性能的瓶颈。将单库迁移到分库分表架构是一种常见的扩展方案&#xff0c;但如何在保证业务连续性的前提下完成这一迁移是一个挑战。以下是不停机迁移的几种主要方案&#xff1a; 一、基于双写的迁移方案 1…

Unix/Linux 系统编程中用于管理信号处理行为的核心概念或模型

在 Unix/Linux 系统编程中&#xff0c;管理信号处理行为涉及以下核心概念和模型&#xff0c;它们共同构成了信号处理的框架&#xff1a;1. 信号&#xff08;Signal&#xff09;模型 软件中断&#xff1a;信号是异步事件通知机制&#xff0c;类比硬件中断预定义类型&#xff1a;…