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

如何分析enq- TM - contention_外键未建索引导致的表级锁阻塞

外键未建索引会导致主表DML时全表扫描子表校验引用,触发整表TM锁争用;通过ASH查P2得子表OBJECT_ID,再结合dba_constraints与dba_ind_columns定位缺失索引的外键。怎么确认是外键没建索引引发的 enq: TM - contention直接查 v$active_session_history 或历史 ash 视图,过滤出等待事件为 enq: tm - contention 的会话,重点看 p2 字段值——它就是被阻塞对象的 object_id。再用 dba_objects 反查这个 id 对应哪张表,大概率会发现:阻塞源头不是你正在操作的那张主表,而是它的某个子表(比如你 update tab1,但 p2 指向的是 tab2)。接着验证外键关系:SELECT * FROM dba_constraints WHERE constraint_type = 'R' AND r_constraint_name IN (SELECT constraint_name FROM dba_constraints WHERE table_name = 'TAB1' AND constraint_type = 'P'),找出所有引用 TAB1 主键的子表约束;再检查这些子表的外键列上有没有索引——没有索引的,就是根因。常见错误现象:update/delete 主表时,会话卡在 enq: TM - contention,BLOCKING_SESSION 显示另一个会话正对子表做 insert/update/commit 前的长时间事务注意:P2 是对象 ID,不是数据文件号或块号,别误查 dba_data_files如果子表是分区表,还要确认索引是否是本地(LOCAL)且覆盖全部分区,否则仍可能争用为什么外键没索引会导致子表被锁住Oracle 在主表执行 DML(尤其是 update 主键、delete 行)时,必须确保子表中没有“悬空引用”。如果没有索引,数据库只能全表扫描子表来校验一致性——这个过程需要在子表上申请 TM 锁(MODE=4,即 Share Row Exclusive),而该锁与子表上正在运行的 insert/update 事务持有的 MODE=3(Row Exclusive)不兼容,于是产生阻塞。关键点在于:这个锁不是加在某几行上,而是整张子表级别;哪怕只改主表一行,也会触发对整个子表的锁申请。场景举例:子表 ORDER_ITEMS 外键 order_id 无索引,此时有人在 insert 新订单项(未 commit),另一人想 delete ORDERS 中某条 order,就会被卡住insert 主表也会触发同样逻辑(尤其当启用 ON DELETE CASCADE 但未建索引时)并行 DML(如 /*+ APPEND */)也可能申请高阶 TM 锁,但那是另一类原因,和外键无关怎么快速找出所有缺失外键索引的子表用这段 SQL 扫一遍全库(建议在非高峰执行): Murf AI AI文本转语音生成工具

http://www.jsqmd.com/news/679943/

相关文章:

  • 从天线设计到声学分析:手把手教你用Python贝塞尔函数解决5个经典工程问题
  • 微积分基本定理实战:5个常见积分上限函数求导案例解析
  • 2026金属舵机选购指南:航模车模舵机/舵机云台/舵机公司/舵机厂家/舵机定制/舵机精度/转台舵机/转向能机/金属舵机/选择指南 - 优质品牌商家
  • 告别混乱提示!用SE91消息类统一管理你的SAP Fiori/ABAP程序用户交互
  • 海康iSC平台API对接门禁权限,别再乱调接口了!四种场景保姆级调用流程与避坑指南
  • 智能茅台预约系统:解放双手的自动化解决方案完全指南
  • 如何在响应式网页中精准居中表单(CSS绝对定位 + transform技巧)
  • 兔抗MLL1抗体亲和纯化,批次间稳定,低背景,高信噪比
  • 从战场到物流:多无人机路径规划中的A*、RRT和MPC到底该怎么选?
  • 从Victim Cache到CAM:深入ARM A78 CPU,看现代处理器如何‘抢救’Cache Miss
  • RTKLIB数据处理全流程实战:从观测文件下载到RTKPOST解算出图
  • 如何在 Go 方法中正确修改切片类型
  • 兔抗ASH2抗体亲和纯化,四平台验证,满足表观遗传学全流程需求
  • 别再乱设random.seed了!PyTorch模型可复现性实战指南(附完整代码)
  • 2026养虫室选型技术分享:低温型人工气候室、保鲜库、催芽室、全天候智能人工气候室、医药冷库、培养架型气候室、恒温恒湿库选择指南 - 优质品牌商家
  • Android应用保活完整指南:突破系统限制实现永久后台运行
  • 5分钟掌握:Blender 3MF格式完整导入导出终极指南
  • [大模型实战 - 完结篇] 告别孤岛:拥抱 MCP 协议,为大模型打造标准“USB 接口”
  • Java 8 Comparator.reversed() 实战避坑:为什么你的倒序排序结果和预期不一样?
  • 2026年比较好的定制集装箱推荐品牌厂家 - 品牌宣传支持者
  • CSS如何让背景图片在容器内居中_使用background-position设为center
  • 手把手教你用官方工具制作Win10安装U盘,告别第三方PE和Ghost镜像
  • 别再死记硬背公式了!用HEC-RAS 1D模拟恒定流,从能量方程到实战配置全解析
  • Windows Cleaner实战指南:3个技巧高效解决C盘爆满问题
  • Mac新手必看:给你的iTerm2终端装上‘拖拽上传’功能(rz/sz保姆级配置)
  • PyTorch训练报错‘CUDA kernel errors might be asynchronously reported’?手把手教你用CUDA_LAUNCH_BLOCKING定位真凶
  • ROS Navigation避坑指南:手把手教你调试MoveBase的全局与局部规划器(附常见问题排查)
  • AI+3D工作流革命:用ComfyUI-3D-Pack实现高效多视角渲染(含TripoSR模型实战)
  • 2026年Q2集装箱选购指南:集装箱租赁、集装箱房屋、集装箱活动房、集装箱定制、租赁用集装箱、住人集装箱、集装箱选择指南 - 优质品牌商家
  • 【应对多系统AIGC检测】英文论文降AI率全攻略:4种手动方法+5款工具横评