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

Oracle-一次TX行锁堵塞事件

问题背景:

        接用户问题报障,应用服务出现大量会话堆积现象,数据库锁堵塞严重,需要协助进行问题定位和排除。

问题分析:

        登录到数据库服务器上,首先查看一下数据库当前的等待事件情况,通过gv$session视图可以看到,当前会话存在大量的enq: TX - row lock contention行锁堵塞。

484c098390088f0988bb7fbc1914a4d6.png

        对应出现TX行锁堵塞情况,需要分析一下TX行锁的堵塞链情况,确认是否是同一个堵塞源还是多个不同的堵塞源,对于同一个堵塞源引发的TX行锁问题,需要重点去分析这个堵塞源的会话状态和操作行为是否存在问题,比如有没有在执行长时间拿锁的操作,语句的执行状态时间、会话的状态空闲还是活跃以及业务的事务执行逻辑。对于出现多条堵塞链和多个不同的堵塞源情况,通常是由于数据库的性能问题、表索引的设计问题、业务的事务逻辑问题导致,需要先分析整理堵塞链上的操作对象是否存在关联,业务的执行逻辑是否存在关系,再进一步分析堵塞产生的原因。

        这里我们通过gv$session视图的blocking_session查询会话之间的堵塞链情况,可以看到会话的堵塞源最终都指向了节点一实例的SID:855会话。

b7173b92d3809c6826795eaee8d03b7f.png

select *from (select a.inst_id, a.sid, a.serial#,a.sql_id,a.event,a.status,connect_by_isleaf as isleaf,sys_connect_by_path(a.SID||'@'||a.inst_id, ' <- ') tree,level as tree_levelfrom gv$session astart with a.blocking_session is not nullconnect by (a.sid||'@'||a.inst_id) = prior (a.blocking_session||'@'||a.blocking_instance))where isleaf = 1order by tree_level asc;

        由于堵塞源都指向855会话,因此这里我们只取其中一条堵塞链<- 69@1 <- 100@1 <- 368@1 <- 855@1进行分析。

        查看堵塞源SID 855的会话执行情况,可以看到会话为LGWR进程,状态为ACTIVE,等待事件为rdbms ipc message。LGWR引发堵塞,很有可能是LGWR进程无法及时完成日志写工作。

e6c1b91a0eaba6f29c33390b6b597f5b.png

        再继续往下查看,堵塞链上的下一级会话SID 368,可以看到会话为JDBC应用会话,等待事件为log file switch (checkpoint incomplete),当前执行SQL为:gyc4mt35nxs83,可以看到当前会话是由于日志切换检查点未完成,导致会话出现堵塞。

cdb63242a67e8a4c8e3c503e87d0c488.png

        再继续查看下一级会话SID 100和69,可以看到会话为JDBC应用会话,等待事件为enq: TX - row lock contention,当前执行SQL为:gyc4mt35nxs83。

d7bc04990bf397307b76540e9292fc6e.png

        执行SQL:gyc4mt35nxs83为UPDATE XXXX_TAB语句。

c5a0572a6ffa6e519fbc23fd1c1968d7.png

        从这里,我们可以确认整个堵塞链的发生原因,由于LGWR进程日志切换检查点无法及时完成,导致执行XXXX_TAB的UPDATE语句的会话出现等待,进而引发后续的对该表的UPDATE会话出现TX锁堵塞。

        从后台日志也可以看到有很多由于检查点未完成导致日志无法分配的信息,那么数据库当前出现日志切换检查点未完成的原因是什么呢,我们继续往下分析。

20b2d06cf33c702bc375922aa738dacf.png

        当前数据库REDO日志组的配置为1G*3组,属于合理的日志组配置,查看数据库的磁盘IO负载情况,可以看到当前的磁盘IO负载非常繁忙,IO util已经达到100%,很明显当前数据库的IO写操作较多,频繁触发检查点,加上DBWR进程不断写数据,最终导致日志切换由于检查点来不及完成出现等待。

80533a49e16c6c09d258887d3f0d26b2.png

        检查数据库的写操作,发现罪魁祸首原来是之前的TX锁执行语句gyc4mt35nxs83,语句对千万级的分区进行全扫描,加上服务器的磁盘为机械盘,磁盘IO性能很快就被打满。

a9b1959d2218965062f8e5f67e35298b.png

问题解决:

        1 跟应用确认,当前的会话模块为非核心业务,可以先将TX锁堵塞会话kill,释放服务器IO资源,避免影响其他业务模块。

        2 先关闭引发TX锁的非核心业务模块,待语句优化之后再进一步启动。

Tip:欢迎关注公众号:勇敢牛牛的笔记,超100+的原创内容,每周不定期更新数据库技术文章

相关文章:

Oracle-一次TX行锁堵塞事件

问题背景&#xff1a; 接用户问题报障&#xff0c;应用服务出现大量会话堆积现象&#xff0c;数据库锁堵塞严重&#xff0c;需要协助进行问题定位和排除。 问题分析&#xff1a; 登录到数据库服务器上&#xff0c;首先查看一下数据库当前的等待事件情况&#xff0c;通过gv$ses…...

Gtid方式搭建主从复制+MHA高可用集群

GTID是什么 GTID(全局事务标识符),它用于唯一标识一个事务。每个GTID由三个部分组成: 服务器唯一标识符事务序列号全局事务标识符使用gtid可以简化主从复制的配置和管理,减少由于复制链路终端、主从数据不一致等问题带来的风险如何开启GTID: 在/etc/my.cnf文件中添加如下…...

基于matlab GUI的Alpha shapes边缘提取

1、程序介绍 本程序是基于matlab语言&#xff0c;使用alpha shapes算法实现点云边缘提取。算法具体原理参考博客&#xff1a;基于alpha shapes的边缘点提取&#xff08;matlab&#xff09;-CSDN博客。该程序包括3个按钮&#xff1a;加载点云、边缘点提取、保存。其中&#xff0…...

[Android]常见的包管理方式

在Android开发中&#xff0c;包管理主要是通过构建和依赖管理工具来处理。下面列举了几种最常见和主流的包管理方式&#xff1a; 一、Gradle Gradle 是 Android 官方推荐的构建工具&#xff0c;几乎成为了 Android 开发的标准。它支持自定义构建逻辑、依赖管理、多项目构建等…...

每日10亿数据的日志分析系统OOM

背景 一个每日10亿数据的日志清洗系统&#xff0c;主要工作就是从消息队列中消费各种各样的日志&#xff0c;然后对日志进行清洗&#xff0c;例如&#xff1a;用户敏感信息(姓名、手机号、身份证)进行脱敏处理,然后把清理完的数据交付给其他系统使用。 我们项目中&#xff0c;…...

智能驱动,精准管理:打造高效干部管理系统

干部管理系统是现代组织管理中不可或缺的工具&#xff0c;它通过信息技术的应用&#xff0c;提高了干部管理的效率和准确性。干部管理系统的主要功能包括&#xff1a; 1. 信息管理&#xff1a;系统可以存储和管理干部的个人信息&#xff0c;包括基本资料、工作经历、教育背景、…...

轮式机器人简介

迄今为止,轮子一般是移动机器人学和人造交通车辆中最流行的运动机构。它可达到很高的效率, 如图所示, 而且用比较简单的机械就可实现它的制作。 另外,在轮式机器人设计中,平衡通常不是一个研究问题。 因为在所有时间里,轮式机器人一般都被设计成在任何时间里所有轮子均与地接…...

已知哈夫曼节点个数,求哈夫曼字符编码数

哈夫曼编码(Huffman Coding)是一种用于无损数据压缩的嫡编码(权编码)算法。 在哈夫曼树中&#xff0c;每个叶子节点都代表一个字符&#xff0c;而节点的权重通常代表字符的频率。在哈夫曼编码中&#xff0c;每个字符都会被赋予一个二进制编码。为了获得这些编码&#xff0c;我…...

Kubernetes Cluster IP,Node IP,Pod IP间通信原理解析

目录 1、Cluster IP2、Node IP3、NodePort4、Pod IP5、LoadBalancer6、三种IP间通信6.1、Pod IP 与 Pod IP 通信6.2、Pod IP 与 Cluster IP 通信6.3、Node IP 与 Pod IP 通信6.4、Node IP 与 Cluster IP 7、YAML 示例7.1、ClusterIP Service7.2、LoadBalancer Service 1、Clust…...

随机链表的深拷贝

1.题目 解题思路一&#xff1a;暴力求解&#xff0c;先创建新链表&#xff0c;然后把旧链表中的val和next指针给复制到新链表中&#xff0c;根据旧链表中的random指针所指向的旧链表中的val值找到所对应的节点&#xff0c;记录该节点的位置&#xff0c;就像数组一样&#xff0c…...

328_C++_HTTP_HTTP协议传输data数据,为什么要进行base64编解码操作?

http传输data数据的时候&#xff0c;为什么必须进行base64转码后才能有效发送&#xff0c;接收方也必须base64转码后才能有效接受&#xff1f; HTTP  HTTP传输数据时&#xff0c;使用Base64编码并不是必须的&#xff0c;但它确实在某些情况下非常有用。以下是为什么在某些情况…...

【二叉树】Leetcode N 叉树的层序遍历

题目讲解 429. N 叉树的层序遍历 算法讲解 在做层序遍历的时候由于它的每一个结点是有val vector child组成&#xff0c;所以在做层序遍历的时候需要考虑它每一层结点的个数&#xff0c;那我们就可以使用一个queue保存每一层的结点&#xff1b;那么我们在做第一层的时候&am…...

Spring AI

目录 一、Spring AI 1、Spring AI简介 1.1、四次工业革命发展和变革 1.2、什么是人工智能? 1.3、人工智能的发展历程 1.4、什么是大模型? 1.5、如何训练大模型? 一、Spring AI 1、Spring AI简介 Spring AI Java接入人工智能大模型 1.1、四次工业革命发展和变革 人类…...

fiori SAP ui5 动态改变控件颜色

使用CustomData动态改变控件颜色 有时候我们需要改变控件颜色&#xff0c;对于高度封装的控件&#xff0c;显然改变控件CSS是比较困难的&#xff0c;幸好SAP UI5预设了一个customData的属性&#xff0c;每个控件都能使用她。 如下代码是判断汇率是否有改变&#xff0c;如果改…...

RabbitMQ php amqp

Linux debian 安装 Windows php amqp 扩展 PECL :: Package :: amqp 将 php_amqp.dll 复制到 php 的 ext 目录下 将 rabbitmq.4.dll 复制到 c:\windows\system32 目录下 php.ini extensionamqp...

对称二叉树

给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;falses 思路&#xff1a;我刚开始是想着用…...

浅浅总结SQL中的事务.

在现实生活中有很多的线上支付的场景,当支付的时候&#xff0c;一方资金减少&#xff0c;另一方资金增加&#xff0c;在执行前后&#xff0c;两者的总体数额需要相同&#xff0c;为了保证这个操作的完整&#xff0c;所以提出了事务&#xff0c;那我们先来去写一个示例&#xff…...

C++ | Leetcode C++题解之第76题最小覆盖子串

题目&#xff1a; 题解&#xff1a; class Solution { public:unordered_map <char, int> ori, cnt;bool check() {for (const auto &p: ori) {if (cnt[p.first] < p.second) {return false;}}return true;}string minWindow(string s, string t) {for (const au…...

什么可以替代iframe?

网页嵌套中&#xff0c;iframe曾几何时不可一世&#xff0c;没有其他更好的选择&#xff01; iframe即内联框架&#xff0c;作为网页设计中的一种技术&#xff0c;允许在一个网页内部嵌套另一个独立的HTML文档。尽管它在某些场景下提供了便利&#xff0c;但也存在多方面的缺陷…...

HTTP/1.0、HTTP/1.1、HTTP/2.0区别

文章目录 区别HTTP/1.0HTTP/1.11. 持久连接&#xff08;长连接&#xff09;2. 管道化3. Host头字段4. 分块传输编码5. 缓存机制6. 请求方法 HTTP/2.01. 二进制分帧2. 多路复用3. 服务器推送4. 优先级设置5. 头信息压缩6. 安全性7. 流量控制 区别 特性HTTP/1.0HTTP/1.1HTTP/2.0…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...