ORACE_常见等待事件001_enq: TX - row lock contention

原创 2014年03月01日 16:27:18

enq: TX - row lock contention是oracle常见的等待事件之一。enq是一种保护共享资源的锁定机制,一个排队机制,先进先出(FIFO)发生TX锁的原因一般有几个:
1.不同的session更新或删除同一个记录。
2.唯一索引有重复索引
3.位图索引多次更新
4.同时对同一个数据块更新
5.等待索引块分裂

本文只讨论第1中情况下等待事件的产生已经查看解决。

环境:
select * from v$version;

BANNER
1 Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
2 PL/SQL Release 11.2.0.3.0 - Production
3 "CORE 11.2.0.3.0 Production"
4 TNS for Linux: Version 11.2.0.3.0 - Production
5 NLSRTL Version 11.2.0.3.0 - Production
以scott登录,打开两个会话,第一个会话执行以下sql:


update emp set job='clerk11' where empno=7369;

第二个会话执行以下sql:

update emp set job='clerk22' where empno=7369;


以sys用户打开第三个窗口查看当前非系统session有哪些等待事件:


select s.sid, --sid
s.p1, --参数p1
s.p2, --参数p2
s.p3, --参数p3
s.event, --等待事件名称
s.ROW_WAIT_OBJ#, --等待对象名称
s.ROW_WAIT_FILE#, --等待文件号
s.ROW_WAIT_BLOCK#, --等待块号
s.ROW_WAIT_ROW#, --等待块中行号
s.WAIT_TIME, --等待时间
s.EVENT#, --等待事件号
s.sql_id, --sql_id
s.lockwait, --等待锁
s.command, --sql类型
s.WAIT_CLASS#, --等待事件类别号
s.WAIT_CLASS_ID, --等待事件类别id
s.WAIT_CLASS --等待事件类别
from v$session s
where s.username is not null
and s.event not like '%SQL*Net message from client%'
and s.event not like '%SQL*Net message to client%';


SID 30
P1 1415053318
P2 393229
P3 7074
EVENT enq: TX - row lock contention
ROW_WAIT_OBJ# 75335
ROW_WAIT_FILE# 4
ROW_WAIT_BLOCK# 151
ROW_WAIT_ROW# 0
WAIT_TIME 0
EVENT# 240
SQL_ID ay2btuzusf629
LOCKWAIT 000000009CC689E8
COMMAND 6
WAIT_CLASS# 1
WAIT_CLASS_ID 4217450380
WAIT_CLASS Application


根据上面等待的session的信息查看等待sql:

select s.SQL_TEXT,s.SQL_ID from v$sql s where sql_id='ay2btuzusf629';
SQL_TEXT update emp set job='clerk22' where empno=7369
SQL_ID ay2btuzusf629

查看等待的对象的信息:

select o.OWNER, o.OBJECT_NAME, o.OBJECT_ID, o.DATA_OBJECT_ID, o.OBJECT_TYPE
from all_objects o
where o.object_id = 75335;

OWNER SCOTT
OBJECT_NAME EMP
OBJECT_ID 75335
DATA_OBJECT_ID 75335
OBJECT_TYPE TABLE


查看锁信息:

select l.TYPE, --锁类型 TX-Transaction enqueue TM-DML enqueue 这两个为用户锁 AE-系统锁
l.LMODE, --锁模式
l.CTIME, --锁的时间
l.BLOCK --是否同时造成其他锁
from v$lock l
where l.SID = 30;
TYPE TX
LMODE 0
CTIME 7745
BLOCK 0

以上等待事件信息的产生就是session 2(sid=30)更新session 1(sid=1)未提交的数据产生的。解决办法有:

1.session 1 commit或者rollback dml更新。

2.根据sid ,kill session 2:

select sid,serial# from v$session where sid=30;

SID 30
SERIAL# 19


执行:ALTER SYSTEM KILL SESSION '30,19';

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

enq: TX - row lock contention 等待事件

数据库版本:11.2.0   今天在使用rman备份的时候随意的查看了一下等待事件,除了了我们现在系统遇到的IO瓶颈外,还额外的发了enq: TX - row lock contentio...
  • dbleo
  • dbleo
  • 2016-03-22 13:46
  • 121

oracle 11g数据库”enq: TX - row lock contention“等待事件的处理

今天早晨发现数据库出现”enq: TX - row lock contention“等待,记录下处理过程: SQL*Plus: Release 11.2.0.2.0 Production   SI...

enq: TX - row lock contention 等待事件

OS环境:windows server 2008 64位数据库版本:11.2.0今天在使用rman备份的时候随意的查看了一下等待事件,除了了我们现在系统遇到的IO瓶颈外,还额外的发了enq: TX -...

enq: TX - row lock contention 等待事件

今天在删除某个表的1W多条记录的时候,出现了长时间执行不了。通过转载以下的文章和luck朋友,还有我查OEM帮助,最终找到了原因:其他session未提交事件,导致了锁。最终解决。下列是转载的文章: ...

一次大量enq: TX - row lock contention锁等待的问题

今天下午接到业务报障,系统出现问题,可能是数据库的问题 1,登录系统,查看等待事件,大量row lock 6:12:58] [16:12:58]   SID    SERIAL# OSUSER ...

enq:SQ contention / row cache lock / DFS lock handle(SV) 等待事件 说明

enq:SQ contention/row cache lock/DFS lock handle(SV) 这三个等待事件都与Oracle 的Sequence 有关。 有关Sequence说明,参考我的...

ORACLE 归档空间满导致的enq: TX - row lock contention

ORA-15041 enq: TX - row lock contention diskgroup SFILEARCHDG01 was mounted diskgroup SFILEARCHDG01 ...

enq: TX - Row Lock Contention

遇到了一个 enq: TX - row lock contention的问题,从tkprof看,update真正执行的时间(cpu)很快,但elapsed时间非常长,在最后发现 enq: TX - r...

enq: TX - row lock contention故障处理一则

一个很简单的问题,之所以让我对这个问题进行总结,一是因为没我想象的简单,在处理的过程中遇到了一些磕磕碰碰,甚至绕了一些弯路,二是引发了我对故障处理时的一些思考。
  • oradh
  • oradh
  • 2014-06-20 14:18
  • 1412

数据库出现 enq: TX - row lock contention

数据库出现 enq: TX - row lock contention 今天上午过来,做awr报告数据库出现了很多enq: TX - row lock contention的等待事件,以前从来...
  • RuleV5
  • RuleV5
  • 2012-08-03 14:14
  • 3898
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)