- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在监视 v$session 中的等待事件时,我观察到处于“等待”状态的 session 数量以及“enq:TM 争用”事件。
像下面这样的查询是从不同的 session 运行的,并且没有一个表有任何外键约束。
INSERT /* APPEND */ INTO tabA SELECT /*+ PARALLEL(t,4) */<select list> FROM tabX t;
INSERT /* APPEND */ INTO tabA SELECT /*+ PARALLEL(t,4) */<select list> FROM tabY t;
INSERT /* APPEND */ INTO tabA SELECT /*+ PARALLEL(t,4) */<select list> FROM tabZ t;
etc
此等待事件的原因是什么。
最佳答案
发生这种情况是因为数据库中的多个 session 需要很长时间才能处理某些插入语句。因此,“事件” session 计数非常高,数据库无法接受新的 session 连接。
解决方案:
enq: TM – 争用事件通常是由于 Oracle DML 操作中的表缺少外键约束造成的。一旦通过向相关表添加外键约束来修复问题,enq: TM – 争用事件就会消失。
等待 enq: TM – 等待执行插入操作的 session 的争用事件几乎总是由于未索引的外键约束造成的。当从属表或子表的外键约束引用父表时,就会发生这种情况表缺少关联键上的索引。如果 Oracle 对子表的外键引用的父表中的主键列执行修改,则会获取子表上的表锁。请注意,这些是全表锁 (TM),而不是行级锁 (TX),因此,这些锁不限于行,而是整个表。当然,一旦获得该表锁,Oracle 将阻止所有其他试图修改子表数据的 session 。一旦您在子表中创建了对引用父表的列执行的索引,由于 TM 争用而导致的等待就会消失。
由于在您的情况下表上没有外键约束,因此您可以检查以下几点:
1) 检查任何相关表是否有任何已禁用
外键。如果找到请启用它们。如果您在启用时遇到问题,请按如下方式检查阻塞 session 并终止它们。
SQL> select a.sid, a.serial#
from v$session a, v$locked_object b, dba_objects c
where b.object_id = c.object_id
and a.sid = b.session_id
and OBJECT_NAME='EMP';
SID SERIAL#
---- --------
753 8910
然后终止这个阻塞 session 。
SQL> ALTER SYSTEM KILL SESSION '753,8910';
session killed.
希望之后您能够启用外键(如果有),然后争用问题将得到解决。
关于oracle - oracle中 'enq:TM contention'等待事件的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41425837/
我的程序出现了异常行为,让我解释一下: 函数如下所示: void PrintDirTree(const char* dirName, size_t depth) 然后我有一个 while 循环,我在其
在监视 v$session 中的等待事件时,我观察到处于“等待”状态的 session 数量以及“enq:TM 争用”事件。 像下面这样的查询是从不同的 session 运行的,并且没有一个表有任何外
我在我的在线hbase服务中发现了一段gc日志如下: 2018-11-08T19:12:35.907+0800: 4069334.381: [GC pause (G1 Evacuation Pause
我是一名优秀的程序员,十分优秀!