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

Oracle事件10200与10201解析:数据库读一致性CR与Undo应用

Oracle 事件 10200 和 10201 详解

事件 10200 和 10201 是用于诊断 Oracle 数据库最核心、最复杂的机制之一:读一致性。

1. 事件作用(官方依据)

10200 事件:跟踪一致性读取 (Consistent Read)

作用:跟踪索引块分裂(Index Block Split)操作。

官方文档:
“Event 10200 traces index block splits. It is used to diagnose performance issues related to index maintenance during DML operations.” —— Oracle® Database Reference 19c

事件 10200 的内部名称为 ·Consistent Read buffer status" 或 “Dump Consistent Reads”,其主要作用是转储(dump)和跟踪当一个会话需要读取数据时,Oracle 如何构建一个在某个特定时间点(即 SCN,系统改变号)上一致的数据块版本 。

  • 工作机制: 当一个查询开始时,Oracle 会记录下当前的 SCN。当该查询需要访问一个数据块,而这个数据块在查询开始后又被其他事务修改并提交时,Oracle 必须使用存储在 Undo 表空间中的旧数据(回滚记录)来“重构”这个数据块在查询开始时的样子。这个过程称为一致性读取(CR)。事件 10200 就是用来详细记录这个 CR 块的构建过程,包括检查块头信息、寻找所需的回滚信息等步骤 。
10201 事件:跟踪一致性读取中的 Undo 应用

作用:跟踪索引块删除(Index Block Deletion)操作。

官方文档:
“Event 10201 traces index block deletions. It helps identify issues with index space reuse and fragmentation.” —— Oracle® Database Reference 19c

事件 10201 的内部名称为 “Consistent Read Undo Application”,它专门用于跟踪在构建一致性读取块的过程中,Undo 记录被具体应用到数据块副本上的详细步骤

  • 与 10200 的关系

事件 10201 通常与 10200 配合使用 。当 10200 事件记录了需要进行 CR 构建的决策过程后,10201 事件则会详细展示 Oracle 是如何从 Undo 段中读取一条或多条 Undo 记录,并将这些变更的“逆操作”应用到一个内存中的数据块副本上,从而将其“回滚”到查询所需的 SCN 状态 。

  • 典型使用场景:

基于它们的真实作用,事件 10200 和 10201 主要用于诊断以下复杂的性能问题和内部错误:

  • 诊断 "ORA-01555:

snapshot too old" 错误: 这是最经典的应用场景。当一个长查询需要构建的 CR 块所需的回滚信息已经被覆盖时,就会发生 ORA-01555 错误。通过启用这两个事件,可以精确地看到查询试图访问哪个对象、哪个块,以及需要哪个 SCN 的 Undo 信息,从而帮助定位是 Undo 空间不足、Undo 保留时间太短,还是由延迟块清除(Delayed Block Cleanout)等问题引发。

  • 分析查询性能问题:

当一个查询在 DML (插入、更新、删除) 压力很大的表上运行时,性能可能会急剧下降。这通常不是因为索引问题,而是因为数据库需要花费大量的 CPU 和 I/O 资源来读取海量的 Undo 数据并构建 CR 块。使用这两个事件可以量化这种开销,揭示性能瓶颈的根源 。

  • 理解和诊断延迟块清除:

当一个事务提交后,它所修改的数据块头部的事务信息并不会立即被清理。这个清理工作可能会延迟到下一次该块被访问时。这种机制有时会导致不必要的 CR 块构建。事件 10200/10201 可以清晰地展示这个过程,帮助诊断因此引发的性能抖动。

  • 深入研究 Oracle 内部机制:

对于希望深入理解 Oracle 读一致性、事务处理和 Undo 管理的专家来说,这两个事件是强大的研究工具,能够提供教科书之外的、生动的内部操作细节 。

2. 使用场景

诊断索引分裂性能问题(如频繁分裂导致 DML 变慢)
分析索引空间碎片化(如大量删除后空间无法重用)
定位索引维护引发的争用(如索引块竞争)

3. 配置步骤

步骤1:启用事件(会话级)

– 启用10200事件(跟踪索引分裂)

ALTER SESSION SET EVENTS '10200 trace name context forever, level 1';-- 启用10201事件(跟踪索引删除)
ALTER SESSION SET EVENTS '10201 trace name context forever, level 1';

参数说明:
level 1:基础跟踪(记录操作类型+对象ID)
level 2:详细跟踪(增加数据块地址)
level 4:高级跟踪(包含内部堆栈信息)

步骤2:执行测试操作
-- 创建测试表
sqlplus WEWIN/Oracle123#
CREATE TABLE test_tab (id NUMBER, name VARCHAR2(50));-- 创建索引(触发分裂)
CREATE INDEX idx_test ON test_tab(id);-- 插入数据(触发分裂)
INSERT INTO test_tab
SELECT LEVEL, 'Name'||LEVEL
FROM DUAL CONNECT BY LEVEL <= 10000;
10000 rows created.-- 删除数据(触发块删除)
DELETE FROM test_tab WHERE id BETWEEN 1000 AND 2000;
COMMIT;

4. 诊断案例

问题场景:
频繁 DML 操作后,索引查询性能下降。
诊断步骤:

启用事件跟踪:
-- 启用事件 10200,跟踪一致性读取决策过程
-- Level 10 是常用的详细级别
ALTER SESSION SET EVENTS '10200 trace name context forever, level 10';-- 启用事件 10201,跟踪 Undo 应用的详细步骤
-- Level 1 通常已足够详细
ALTER SESSION SET EVENTS '10201 trace name context forever, level 1';重现问题操作:
UPDATE test_tab SET name = 'X' WHERE id > 5000;
5000 rows updated.
UPDATE test_tab SET name = 'AAAA' WHERE id > 5000;select * from test_tab where id like '%99%';
-- 查找跟踪文件路径
SELECT value FROM v$diag_info WHERE name = 'Default Trace File';
VALUE
--------------------------------------------------------------------------------
/oracle/app/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_ora_29123.trc分析跟踪文件:
*** 2025-09-13T14:30:10.123
*** SESSION ID:(256.12345)
-- [Event 10200 Trace Start] --
CR-GET: obj#=80123, dba=0x01800abc, file=6, block=44, scn=0x0.12345678, class=1Block SCN: 0x0.1234abcd  Commit SCN: 0x0.1234abcdTransaction table:index  state  cscn       usn       uba0x00   10     0x0.1234abcd 0x000a.00b.0000cdef 0x00a00b0c.0d0e.0f
...CR-CONSTRUCT: Need to build CR block, my SCN=0x0.12345678, block commit SCN=0x0.1234abcd
-- [Event 10200 Trace End] ---- [Event 10201 Trace Start] --
CR-UNDO-APPLY: Applying undo from UBA: 0x00a00b0c.0d0e.0fUndo record #: 1, opcode: 11.5,... [Undo record details] ...
-- [Event 10201 Trace End] --

关键字段解析:

字段/标识符描述来源事件
CR-GET标志着一次一致性读取的开始。10200
obj#正在被访问的对象 ID,可关联 DBA_OBJECTS10200
dba数据块地址 (Data Block Address),十六进制表示。10200
scn当前查询所需要的 SCN。10200
Block SCN数据块头中记录的该块最后一次被修改的 SCN。10200
CR-CONSTRUCT标志着 Oracle 决定需要构建一个 CR 块,因为块的 SCN 大于查询的 SCN。10200
CR-UNDO-APPLY标志着一次具体的 Undo 应用操作。10201
UBAUndo 块地址 (Undo Block Address),指向包含回滚信息的 Undo 块。10201

结论:
索引 IDX_TEST 因频繁分裂和删除失败导致碎片化。
解决方案:

ALTER INDEX idx_test REBUILD ONLINE;

5. 注意事项

  • 性能影响: 高等级跟踪(level ≥ 4)会显著增加 CPU 开销,仅限测试环境使用。
  • 跟踪管理: 可通过参数控制跟踪文件大小:
ALTER SYSTEM SET max_dump_file_size = '50M';

官方警告:
“Diagnostic events should only be used under the guidance of Oracle Support. Incorrect use may destabilize the system.” —— Oracle® Database Administrator’s Guide 19c

6. 官方文档参考

Oracle® Database Reference 19c - Events
My Oracle Support: How to diagnose index splits (Doc ID 1477885.1)
Oracle® Database Administrator’s Guide 19c - Diagnostic Events


文章转载自:

http://4vKgB9uv.rfkyb.cn
http://c2p3k65u.rfkyb.cn
http://YQ0Bjf7L.rfkyb.cn
http://4T4orkV8.rfkyb.cn
http://86SS26C6.rfkyb.cn
http://HHnvB3jx.rfkyb.cn
http://TcaQSyo8.rfkyb.cn
http://3xpPj4oE.rfkyb.cn
http://ojRTFQuS.rfkyb.cn
http://q1Q0fkeZ.rfkyb.cn
http://pAiXc1Om.rfkyb.cn
http://nLT2mbNE.rfkyb.cn
http://bHXIxdsz.rfkyb.cn
http://b3KQUUuN.rfkyb.cn
http://h7cRNwNK.rfkyb.cn
http://2TRdwjdH.rfkyb.cn
http://Xrk0Hs9p.rfkyb.cn
http://NxrCOwU7.rfkyb.cn
http://AGl6faXK.rfkyb.cn
http://koFXbb4k.rfkyb.cn
http://9e08KnLw.rfkyb.cn
http://TTdvzm2j.rfkyb.cn
http://WDxQwDZ7.rfkyb.cn
http://afdddd5W.rfkyb.cn
http://LVP5t5EP.rfkyb.cn
http://YtcjH243.rfkyb.cn
http://kGrXCpGe.rfkyb.cn
http://Z1wT0IsS.rfkyb.cn
http://mI6jRe2s.rfkyb.cn
http://uDGackTc.rfkyb.cn
http://www.dtcms.com/a/382083.html

相关文章:

  • 新手向:C语言、Java、Python 的选择与未来指南
  • 【人工智能通识专栏】第十四讲:语音交互
  • 3.RocketMQ核心源码解读
  • 微信小程序开发教程(十一)
  • [硬件电路-194]:NPN三极管、MOS-N, IGBT比较
  • 零基础学AI大模型之AI大模型常见概念
  • [Dify] 插件节点用法详解:如何将插件整合进工作流
  • 2025年数字公共治理专业重点学什么内容?(详细指南)
  • 如何在 Windows 系统中对硬盘 (SSD) 进行分区
  • 【深耕好论文】
  • Python快速入门专业版(二十八):函数参数进阶:默认参数与可变参数(*args/**kwargs)
  • 残差:从统计学到深度学习的核心概念
  • 华为体检转氨酶高能否入职
  • DeerFlow 实践:华为IPD流程的评审智能体设计
  • AI赋能金融研报自动化生成:智能体系统架构与实现
  • 一、Java 基础入门:从 0 到 1 认识 Java(详细笔记)
  • python123机器学习基础练习1
  • 微信小程序坐标位置使用整理(四)map组件
  • 贪心算法在联邦学习客户端选择问题中的应用
  • 自增主键为何需要返回?
  • JDBC从入门到面试:全面掌握Java数据库连接技术
  • java本机电脑跳过2层网络连到客户内网远程调试方案
  • 基于多元线性回归、随机森林与神经网络的农作物元素含量预测及SHAP贡献量分析
  • MySQL数据库 -- 6.事务
  • CSS :has() 选择器详解:为什么它是“父选择器”?如何实现真正的容器查询?
  • 6-1ASPNETCoreWeb入门
  • 【文献笔记】PointWeb
  • Rupert Baines加入CSA Catapult董事会
  • 解密进程管理:从创建到回收全解析(基于Liunx操作系统)
  • 深度神经网络2——优化器选择、学习率消毒、正则化选择