oracle排查长时间没提交的事务造成的阻塞案例
一 问题描述
开发同事反馈生产环境某个接口慢,一个普通的按主键更新的update竟然需要5分钟,而我手动执行秒返回,猜测是发生了阻塞,需要排查出阻塞源。
有时,一个事务里会包含多个sql,有的还包含上传附件等操作,一个事务长时间不提交会导致其他相关sql被阻塞,比如事务里的sql执行得很快,但上传附件卡住的话,那也会阻塞其他相关sql。
查看锁阻塞的sql只能查看到阻塞方事务最近执行的一条sql,查不到之前的sql,所以有时候查出的阻塞结果不准确,这时候需要结合对这个表的审计来确定阻塞方sql。
二 排查思路
1.创建一个针对这个被阻塞的表的审计
2.让同事复现下这个问题
3.查下阻塞,抓下阻塞方的audsid
4.根据audsid查看这个会话的审计结果,看看对这个表都做了啥操作。
三 排查过程
#这里以在自己测试环境模拟一个简单的锁阻塞为例
3.1 创建FGA审计,只审计被阻塞的表
#审计SCOTT.T2表
begin
dbms_fga.add_policy (
object_schema => 'SCOTT',
object_name => 'T2',
policy_name => 'TEST',
statement_types => 'SELECT,INSERT,UPDATE,DELETE'
);
end;
/
--必须指定statement_types => 'SELECT,INSERT,UPDATE,DELETE',否则默认只审计SELECT。
#查看当前有哪些审计
select * from DBA_AUDIT_POLICIES;
3.2 故障模拟
#在会话1用scott用户登录,执行一个sql,但不提交
SQL> update scott.t2 set name='ffff' where id=2;
#在会话2也修改同一条记录
SQL> update scott.t2 set name='ggggg' where id=2;
会话2会被会话1阻塞。
#在会话1再执行个其他的sql
SQL> select 1 from dual;
3.3 查看阻塞
3.3.1 查看阻塞链
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(SID, '<-') tree,level as tree_levelfrom gv$session astart with a.blocking_session is not nullconnect by nocycle a.sid = prior a.blocking_session)where isleaf = 1order by tree_level asc;
可以看到3152这个会话阻塞了3635。
3.3.2 查看具体阻塞
SELECT DISTINCT s1.inst_id as blocking_inst_id,s1.username as blocking_username,s1.machine as blocking_machine,s1.module as blocking_module,s1.sid as blocking_sid,s1.audsid as blocking_audsid,s1.serial# as blocking_serial#,c1.sql_text as blocking_sql_text,s1.status as blocking_staus,s1.event as blocking_event,s2.inst_id as waiting_inst_id,s2.username as waiting_username,s2.machine waiting_machine,s2.module as waiting_module,s2.sid as waiting_sid,s2.audsid as waiting_audsid,s2.serial# as waiting_serial#,c2.sql_text as waiting_sql_text,s2.status as blocking_staus,s2.event as waiting_eventFROM gv$lock l1,gv$session s1,gv$lock l2,gv$session s2,gv$sqlarea c1,gv$sqlarea c2,gv$process b1,gv$process b2WHERE s1.sid = l1.sidAND s2.sid = l2.sidAND s1.inst_id = l1.inst_idAND s2.inst_id = l2.inst_idAND s1.paddr = b1.addrAND s2.paddr = b2.addrAND c1.SQL_ID=s1.PREV_SQL_ID AND s2.sql_hash_value = c2.hash_valueAND l1.block > 0AND l2.request > 0AND l1.id1 = l2.id1AND l1.id2 = l2.id2UNIONSELECT DISTINCT s1.inst_id as blocking_inst_id,s1.username as blocking_username,s1.machine as blocking_machine,s1.module as blocking_module,s1.sid as blocking_sid,s1.audsid as blocking_audsid,s1.serial# as blocking_serial#,c1.sql_text as blocking_sql_text,s1.status as blocking_staus,s1.event as blocking_event,s2.inst_id as waiting_inst_id,s2.username as waiting_username,s2.machine waiting_machine,s2.module as waiting_module,s2.sid as waiting_sid,s2.audsid as waiting_audsid,s2.serial# as waiting_serial#,c2.sql_text as waiting_sql_text,s2.status as blocking_staus,s2.event as waiting_eventFROM gv$lock l1,gv$session s1,gv$lock l2,gv$session s2,gv$sqlarea c1,gv$sqlarea c2,gv$process b1,gv$process b2WHERE s1.sid = l1.sidAND s2.sid = l2.sidAND s1.inst_id = l1.inst_idAND s2.inst_id = l2.inst_idAND s1.paddr = b1.addrAND s2.paddr = b2.addrAND c1.hash_value=s1.sql_hash_valueAND c1.address=s1.sql_addressAND s2.sql_hash_value = c2.hash_valueAND l1.block > 0AND l2.request > 0AND l1.id1 = l2.id1AND l1.id2 = l2.id2
这里看到sid为3152的会话阻塞了sid为3635的会话。
阻塞方sql为select 1 from dual
被阻塞方sql为update scott.t2 set name='ggggg' where id=2
这显然不合理。因为select 1 from dual不会阻塞任何sql。
记录下阻塞源的audsid。
这里是75356902。
3.4 模拟结束后关闭审计
begin
dbms_fga.drop_policy(object_schema=>'SCOTT',object_name=>'T2',policy_name=>'TEST');
end;
/
3.5 查看审计结果
select * from dba_fga_audit_trail where session_id=阻塞方audsid;
#这里是75356902
select * from dba_fga_audit_trail where session_id=75356902;
找到造成阻塞的sql了:
update scott.t2 set name='ffff' where id=2
#备注
之前审计过的记录在审计结束后,记录不会清空。
相关文章:

oracle排查长时间没提交的事务造成的阻塞案例
一 问题描述 开发同事反馈生产环境某个接口慢,一个普通的按主键更新的update竟然需要5分钟,而我手动执行秒返回,猜测是发生了阻塞,需要排查出阻塞源。 有时,一个事务里会包含多个sql,有的还包含上传附件等…...
React第七节 组件三大属性之 refs 的用法注意事项
1、定义 React 中refs 是允许我们操作DOM 访问组件实例的一种方案。开发人员可以直接使用 refs 访问操作DOM,而不用自身的数据状态,这种方案在实际开发过程中是有必要的,但是不建议通篇使用refs操作DOM,如果是这样,那…...
工程企业需要什么样的物资管理系统?为什么需要物资管理系统?
一、背景与意义 在工程项目的建设中,无论是高楼大厦的拔地而起,还是高速公路的绵延铺展,物资都是最基础的要素之一。从钢筋水泥到施工机械,任何一种物资的管理不善都可能导致项目延误、成本超支,甚至质量问题。然而&a…...

基于网页的大语言模型聊天机器人
代码功能 用户交互界面: 包括聊天历史显示区域和输入框,用户可以输入消息并发送。 消息发送和显示: 用户输入消息后点击“Send”按钮或按下回车键即可发送。 消息发送后显示在聊天记录中,并通过异步请求与后端 AI 模型通信&am…...
深入理解索引(一)
1.引言 在数据库和数据结构中,索引(Index)是一种用于提高数据检索速度的重要机制。本文将详细深入介绍索引。 2. 索引的分类 2.1 B - 树索引(B - Tree Index) 2.1.1 结构细节 树状结构:B - 树索引是一…...

动态规划子数组系列一>最长湍流子数组
1.题目: 解析: 代码: public int maxTurbulenceSize(int[] arr) {int n arr.length;int[] f new int[n];int[] g new int[n];for(int i 0; i < n; i)f[i] g[i] 1;int ret 1;for(int i 1; i < n-1; i,m. l.kmddsfsdafsd){int…...

MATLAB矩阵元素的修改及删除
利用等号赋值来进行修改 A ( m , n ) c A(m,n)c A(m,n)c将将矩阵第 m m m行第 n n n列的元素改为 c c c,如果 m m m或 n n n超出原来的行或列,则会自动补充行或列,目标元素改为要求的,其余为 0 0 0 A ( m ) c A(m)c A(m)c将索引…...
对 TypeScript 中函数如何更好的理解及使用?与 JavaScript 函数有哪些区别?
TypeScript 中函数的理解 在 TypeScript 中,函数本质上与 JavaScript 中的函数类似,但是它增强了类型系统的支持,使得我们可以对函数的参数和返回值进行更严格的类型检查。这样可以有效减少类型错误,提高代码的可维护性和可读性。…...
ubuntu搭建k8s环境详细教程
在Ubuntu上搭建Kubernetes(K8s)环境可以通过多种方式实现,下面是一个详细的教程,使用kubeadm工具来搭建Kubernetes集群。这个教程将涵盖从准备工作到安装和配置Kubernetes的所有步骤。 环境准备 操作系统:确保你使用的…...
ubuntu安装Eclipse
版本 ubuntu16.04 64bitEclipse 2019-12 (太高容易崩溃)下载:wget https://archive.eclipse.org/technology/epp/downloads/release/2019-12/R/eclipse-java-2019-12-R-linux-gtk-x86_64.tar.gzjdk安装 将jdk1.8.0_211-linux-x64.tar.gz解压到…...
C#里怎么样使用线程暂停?
C#里怎么样使用线程暂停? 如果一个线程没有任务在处理,并且又不进行暂停, 这时候,这个线程就会把当前这个CPU占满,即是所谓的死循环。 因此我们设计线程时,一定要知道线程在什么时候没有工作处理时, 就需要进入等待状态,不能再进行下去,否则会导致死循环, 只是耗费…...

畅听FM 3.0.0 | 很有果味的电台软件,超多FM电台,支持播放本地音乐
畅听FM是一款简洁且富有设计感的电台软件,支持收听超多FM电台,还支持播放本地音乐,甚至可以用网址创建音乐源。3.0新版本主要改进了对Android 4.x系统的支持,使得老旧电视和车机也能安装使用,并且新增了横屏显示功能&a…...

力扣面试经典 150(上)
文章目录 数组/字符串1. 合并两个有序数组2. 移除元素3. 删除有序数组中的重复项4. 删除有序数组的重复项II5. 多数元素6. 轮转数组7. 买卖股票的最佳时机8. 买卖股票的最佳时机II9. 跳跃游戏10. 跳跃游戏II11. H 指数12. O(1)时间插入、删除和获取随机元素13. 除自身以外数组的…...

鸿蒙开发-音视频
Media Kit 特点 一般场合的音视频处理,可以直接使用系统集成的Video组件,不过外观和功能自定义程度低Media kit:轻量媒体引擎,系统资源占用低支持音视频播放/录制,pipeline灵活拼装,插件化扩展source/demu…...

第一个autogen与docker项目
前提条件:在windows上安装docker 代码如下: import os import autogen from autogen import AssistantAgent, UserProxyAgentllm_config {"config_list": [{"model": "GLM-4-Plus","api_key": "your api…...
第三十四篇 MobileNetV1、V2、V3模型解析
摘要 这篇文章将 MobileNetV1、V2、V3汇在一起,解析移动端网络的结构。MobileNet系列的模型是非常经典的模型,值得深入研究一番。 MobileNetV1、V2、V3是MobileNet系列的三个重要版本,它们均针对移动和嵌入式设备进行了优化,具有轻量化、高效能的特点。以下是这三个模型的…...
Python学习——字符串操作方法
mystr “hello word goodbye” str “bye” Find函数:检测一个字符串中是否包含另一个字符串,找到了返回索引值,找不到了返回-1 print(mystr.find(str,0,len(mystr))) print(mystr.find(str,0,13)) index函数:检测一个字符串是否包含另一…...

力扣—15.三数之和
15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元…...

容器安全检测和渗透测试工具
《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect Docker-bench-…...
sqlite3自动删除数据的两种设置方式记录
文章概要 〇、背景一、基本思路1.1 按时间分多文件,限制文件的个数1.2 按时间分数据表,限制表的个数1.3 按记录的时间删除超过规定时间数据,限制记录数据的时间1.4 按记录的数据条数删除多余的数据,限制记录数据的个数二、实现代码三、测试方式〇、背景 基于嵌入式编程,在…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...