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

问题描述:某日客户来电某HR系统排值班表的操作一直HANG住,一直无法完成。 这种问题,主要思路是围绕查看此操作因何HANG住。 常见的严重的HANG住有DB方面的AUDIT无空间、归档空间满以及...
  • q947817003
  • q947817003
  • 2015年08月24日 16:45
  • 3463

Know More About Oracle Row Lock(二、解决疑惑,说明行级锁和TX锁即事务锁是不同概念的两个东西)

Know More About Oracle Row Lock 2012/05/16 BY MACLEAN LIU 16条评论 我们都知道在Oracle中实现了细粒度的行锁row lock,且...
  • haiross
  • haiross
  • 2013年09月25日 15:46
  • 2279

查询dba_jobs视图hang住,等待事件enq: TX contention

现象: 客户反馈执行select job,what from dba_jobs时session Hang住,等待事件为enq: TX contention。 现象: 因为没在现场,所以我要求客户执行如...
  • zhou1862324
  • zhou1862324
  • 2013年12月23日 23:20
  • 941

Oracle11gRAC中的等待事件

1、RAC中等待事件的分类 集群的等待事件属于以下类别之一: 面向块的等待 gc current block 2-way gc current block 3-way gc cr b...
  • wang_san_shi
  • wang_san_shi
  • 2015年01月19日 15:31
  • 420

AWR报告(四)--常见等待事件

oracle等待事件是衡量oracle运行状况的重要依据及指示,等待事件分为两类:空闲等待事件和非空闲等待事件, TIMED_STATISTICS = TRUE 那么等待事件按等待的时间排序,= FA...
  • tonyzhou_cn
  • tonyzhou_cn
  • 2013年08月14日 11:36
  • 1722

Oracle常见等待事件概览

1.buffer busy waits:多个进程视图以不兼容的模式获取buffer pin时。 原因:热块,多个会话频繁的读取或修改同样的数据块 2.cbc latch:数据块在sga中的地址存放在一...
  • gumengkai
  • gumengkai
  • 2017年02月06日 21:56
  • 365

由一个案例引出SMON的一个功能: Recover Dead transaction

一.故障说明 前段时间一朋友遇到的案例,根据他的描述,我小整理了一下。 数据库环境:AIX + ORACLE 10.2.0.5, 单机。 朋友说一个大事务不能完成回滚操作,系统异常。 查看等待事件,如...
  • tianlesoftware
  • tianlesoftware
  • 2013年04月03日 00:22
  • 7949

oracle 11g 多次业务用户被锁定 library cache lock导致数据hang住问题解决

现象:生产库业务用户多次被锁定,锁定后伴有library cache lock问题 应急措施: 1、查询library cache lock等待事件的blocking_session,考虑这些bl...
  • lonly_jie
  • lonly_jie
  • 2015年04月24日 15:57
  • 1248

quartz动态定时任务

发现学无止境,只是精力时间有限,什么东东拿来又要费半天的劲把它研究一下,这个也许也是菜鸟级别的程序猿要面对的痛苦处境吧。            最近要用到quartz来进行任务调度,目标是动态的...
  • thisisvoa
  • thisisvoa
  • 2014年03月01日 02:51
  • 1589

ORACLE的TX锁和TM锁及解锁

数据库是一个并发访问的系统,所以说对一个数据库来说最大的问题就是并发控制的问题,这个并发控制所表现的不是在并发读上面,而是在并发写上面。对应并发写,就需要保证数据的一致性!那么什么是是数据一致性呢? ...
  • knuuy
  • knuuy
  • 2015年07月29日 19:01
  • 1002
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACE_常见等待事件001_enq: TX - row lock contention
举报原因:
原因补充:

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