enq: TX - row lock contention(三)

一个enq: TX - row lock contention的案例

文章分类:数据库

RAC重新搭建延后了,就是这个case
系统环境:
RHEL 4.4
oracle 10.2.0.3


用户反映每天业务繁忙时间段(大约21:30)程式“卡死”
是第三天早上反映给我,简单跑了一下ASH
看到
Sql代码
  1. EventEventClass%ActivityAvgActiveSessions
  2. enq:TX-rowlockcontentionApplication41.370.40
  3. CPU+WaitforCPUCPU12.280.12
  4. gcbufferbusyCluster8.300.08
  5. dbfilescatteredreadUserI/O5.490.05
  6. gccrblockbusyCluster4.170.04


其中enq: TX - row lock contention占用user event高达40+%
再查查是哪些语句导致争用
基本都是对于相同的表的insert操作

第三日晚上我在现场处理,看到有大量的insert操作被block了
因为经验不足,没有多看引起block的session和sql语句就直接kill session

询问过程序员后知道,每次程序进行作业前都尝试对一个临时表插入若干条记录,以表示当前作业已经占用资源,其他作业不能进行操作
通常这个动作都是很快完成,完成后会马上把相关的记录从该表中删除

但是很可能因为当时因为某些原因,insert或者后来的delete操作没有commit
所以导致TX row lock争用

在alert log中可以看到
Sql代码
  1. MonJan1821:26:062010
  2. GES:Potentialblocker(pid=29649)onresourceTX-00020003-0009D959;
  3. enqueueinfoinfile/oracle/admin/phaws/bdump/phaws1_lmd0_13687.trcandDIAGtracefile
  4. MonJan1821:27:232010
  5. Thread1advancedtologsequence83802
  6. Currentlog#2seq#83802mem#0:/PHAWS_D00/redo/redo1_02a.log
  7. Currentlog#2seq#83802mem#1:/PHAWS_D01/redo/redo1_02b.log
  8. MonJan1821:34:352010
  9. GES:Potentialblocker(pid=30496)onresourceTX-000A0000-0075A034;
  10. enqueueinfoinfile/oracle/admin/phaws/udump/phaws1_ora_7697.trcandDIAGtracefile
  11. MonJan1821:45:042010
  12. GES:Potentialblocker(pid=29513)onresourceTX-00080016-000A7D28;
  13. enqueueinfoinfile/oracle/admin/phaws/udump/phaws1_ora_22590.trcandDIAGtracefile


再查看相关的DIAG文件,发现以下信息
Sql代码
  1. O/Sinfo:user:lile1028,term:NHTSOA23,ospid:6308:3944,machine:NBWDE/NHTSOA23
  2. program:WMSSG.exe
  3. applicationname:WMSSG.exe,hashvalue=0


而再留意,DIAG中都是NHTSOA23这台Terminal server发起的block

无独有偶,今天检查该server发现有掉包的情况,究竟是不是因为掉包而导致commit失败呢?
from:http://guoyanxi.javaeye.com/blog/575692

你可能感兴趣的:(content)