讲师中心 微信公众号
AI工具推荐 视频效率加速

Oracle 12c中ASH视图怎么看阻塞会话_使用blocking_session字段快速定位

酷浩同学_7312

酷浩同学_7312

发布时间:2026-05-22 12:06:48

|

656人浏览过

|

来源于php中文网

原创

blocking_session字段常为空,因其仅记录采样瞬间的阻塞者,锁持有时间短于1秒或持锁会话在采样间隙提交/回滚即导致漏报;应结合event、session_state、wait_class三条件确认真实行锁等待,并优先使用12c+的final_blocking_session定位根因会话。

blocking_session 字段为什么经常为空?

ash 里的 blocking_session 不是“当前谁在锁我”,而是“采样那一毫秒,谁刚好被记录为阻塞源”。它非常脆弱:如果持锁会话在两次采样之间提交、回滚或完成,这个字段就变成 null。更常见的是,锁持有时间短于 1 秒(比如 300ms),根本没被采到。

别只盯 blocking_session —— 它漏报率高。真正可靠的是组合判断:event = 'enq: TX - row lock contention' + session_state = 'WAITING' + wait_class = 'Concurrency'。这三个同时成立,基本能确认是真实行锁等待。

  • 查的时候必须加时间过滤,例如 sample_time > SYSDATE - 1/24(最近一小时),否则默认扫全历史,慢且干扰多
  • 如果发现大量等待但 blocking_session 总为空,优先怀疑是不是硬解析争用(library cache lock 或游标共享冲突),而不是业务数据行锁
  • 12c+ 环境下,final_blocking_session 比 blocking_session 更值得信任,它能穿透 A→B→C 的级联阻塞链

怎么用 blocking_session 连出完整阻塞链?

单条 ASH 记录只能看到“当前等待者”和“当时记录的阻塞者”,没法自动展开整条链。但你可以用 final_blocking_session 当起点,再反向查它是否也在等别人。

最实用的做法是分两步走:

  • 先找出所有等待行锁的会话:SELECT session_id, final_blocking_session, sql_id FROM v$active_session_history WHERE event = 'enq: TX - row lock contention' AND sample_time > SYSDATE - 1/1440
  • 再对返回的 final_blocking_session 值,去查 v$session:SELECT sid, serial#, sql_id, status, event, blocking_session FROM v$session WHERE sid IN (/* 上一步结果 */)
  • 若第二步里某些会话的 blocking_session 非空,说明还有上游;继续递归查,直到 blocking_session 为空或查不到记录为止

注意:v$session 是实时视图,查出来的是“此刻”的状态;而 ASH 是快照,两者时间点不同,不能直接 JOIN 匹配,得靠人工串联。

current_obj# 和 blocking_session 对不上怎么办?

常见现象:ASH 显示某 SQL 在表 X 上争用(current_obj# = 12345),但 blocking_session 查出来执行的是完全无关的语句,甚至 sql_id 是空的。

这通常不是数据错乱,而是因为:

Ai Session Analysis
Ai Session Analysis

用于分析本地AI编程助手会话数据(如Claude Code、Codex、Kimi Code)。当用户请求分析编程会话时触发。

下载
  • current_obj# 来自采样时刻的物理上下文,指向的是“正在访问的对象”,但它不保证该会话当前 SQL 就操作这张表(比如 PL/SQL 中调用了多个过程)
  • blocking_session 只记录 SID,不带 SQL 上下文;如果那个会话刚执行完 DML 就 idle 了,v$session.sql_id 可能已清空
  • 对象可能已被重建:dba_objects.object_id 没变,但 data_object_id 变了,导致用 current_obj# 构造 ROWID 失败

验证方法:SELECT owner, object_name, object_type FROM dba_objects WHERE object_id = 12345。如果查不到,说明对象已删;如果查到了但 data_object_id 和你从 ASH 里拿到的不一致,那 DBMS_ROWID.ROWID_CREATE 就会返回 NULL。

为什么 final_blocking_session 比 blocking_session 更有用?

final_blocking_session 是 Oracle 12c 引入的字段,它的设计目标就是解决传统 blocking_session “只看一层”的缺陷。它不是简单记录直接阻塞者,而是 Oracle 内部通过锁队列扫描后推导出的“根因会话”。

比如 A 锁住某行 → B 等 A → C 等 B,那么:

  • blocking_session 在 B 的记录里是 A,在 C 的记录里是 B
  • final_blocking_session 在 B 和 C 的记录里都是 A

所以,排查时优先用 final_blocking_session 做聚合:GROUP BY final_blocking_session, current_obj#,能直接定位到“哪个会话、在哪张表上制造了最多等待”。但要注意:这个字段在 12c 初期版本(如 12.1.0.1)不稳定,建议确认数据库补丁级别;另外它只存在于 v$active_session_history,v$session 里没有对应字段。

最易被忽略的一点:即使 final_blocking_session 有值,也不能假设它“还在运行”——它可能早已提交,只是 ASH 快照恰好捕获了它持锁的瞬间。所以查到后,一定要立刻去 v$session 确认该 SID 是否 still active、是否有未提交事务。

热门AI工具

更多
UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

3269

2023.06.20

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

2348

2023.07.25

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

1280

2023.08.02

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1218

2023.08.09

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

1376

2023.09.05

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2218

2023.09.20

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

3560

2023.09.20

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

16355

2023.09.22

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

80

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn