设为首页 加入收藏

TOP

一次数据库相关操作卡住的排查--enq:TX-rowlockcontention(二)
2015-11-21 01:34:27 来源: 作者: 【 】 浏览:1
Tags:一次数据库 相关 操作 卡住 排查 --enq:TX-rowlockcontention
L# MACHINE PROGRAM EVENT SQL_ID STATUS
---------- ---------- -------------------- -------------------- ------------------------- ------------- --------
1050 8 ABCSRV01 JDBC Thin Client latch: cache buffers chai 62rv794fswmcy ACTIVE
ns
可以看到此会话在执行的SQLID为62rv794fswmcy,相关等待事件是:latch: cache buffers chains;
进一步得出此SQL语句的文本及相应执行计划,以及事务的相关信息。
--如下SQL语句截取了部分,并修改了表、列名信息。语句较长,有多个case when判断及嵌套多个视图等复杂查询;
SQL> select sql_text from v$sqltext where sql_id='62rv794fswmcy' order by PIECE;

SQL_TEXT
----------------------------------------------------------------
update AAAA set ts='2015-08-24 13:14:10',AAAAA = ( cas
e when ( pAAAs = 'AA' or pAAAs = 'AAAAAAAA' ) then 0 else
( select AAAA from AAAA where pk_bclbid = AAAA.p
kAAAs ) end ), if_rest = ( case when ( pAAss = 'AAAX' or pk_c

查看此SQL的执行计划等信息--这里使用了awrsqrpt报告
--从游标缓存中查询此SQL语句执行计划信息:
col plan_table_output for a100
set long 900
set pagesize 100
select * from table(dbms_xplan.display_cursor('62rv794fswmcy',0,'advanced'));
--生成awrsqrpt报告
SQL> @?/rdbms/admin/awrsqrpt.sql
---此处执行计划太长,文本型的基本不具有可读性,参考了awrsqrpt报告中的信息如下。
Stat Name Statement Total Per Execution % Snap Total
Elapsed Time (ms) 2,686,331 4.69
CPU Time (ms) 2,669,779 24.23
Executions 0
Buffer Gets 239,883,842 24.78
Disk Reads 0 0.00
Parse Calls 1 0.00
--可以看到此SQL语句目前已经执行了2686秒,Buffer Gets的数据块个数是239,883,842,2亿多个。



进一步查询此SQL对应的会话信息:
SQL> select sid,serial#,machine,program,EVENT,SADDR,STATUS from v$session where SADDR in(select SES_ADDR from v$transaction) and sid=1050;

SID SERIAL# MACHINE PROGRAM EVENT SADDR STATUS
---------- ---------- ---------- -------------------- ---------------------------------------- ---------------- ----------
1050 8 ABCSRV01 JDBC Thin Client SQL*Net more data from client 000000075B9EE930 ACTIVE


SQL> select START_TIME,STATUS,SES_ADDR from v$transaction where ses_addr='000000075B9EE930';

START_TIME STATUS SES_ADDR
-------------------- ---------- ----------------
08/24/15 10:37:21 ACTIVE 000000075B9EE930

可以看到此事务从上午10:37开始运行一直到进行处理时的14:30左右还在运行;
经观察此会话执行的SQL不只上面查出的一条且都运行时间较长,因此判断是同一事务中的多个大型SQL;
因SQL执行速度较慢且在同一事务中,在全部SQL执行完之前事务不提交也不回滚,导致TX行锁资源一直得不到释放。
进而导致其它会话的相关操作都HANG住在等待此会话释放TX锁资源。


5.找到问题原因--TX - row lock contention产生原因并进行处理

经与用户确认,决定KILL此会话;同时联系业务部门确认此会话的相关SQL执行的为何种操作并进行修正。
--KILL会话及后续查询如下:
SQL> col EVENT for a20
SQL> select sid,serial#,machine,program,EVENT,SADDR,SQL_ID,STATUS from v$session where SADDR in(select SES_ADDR from v$transaction) and sid=1050;

SID SERIAL# MACHINE PROGRAM EVENT SADDR SQL_ID STATUS
---------- ---------- ---------- ------------------------- -------------------- ---------------- ------------- ----------
1050 8 ABCSRV01 JDBC Thin Client latch free 000000075B9EE930 36mu7qg6cc5yu ACTIVE

SQL> alter system kill session '1050,8';

System altered.

SQL> select sid,serial#,machine,program,EVENT,SADDR,SQL_ID,STATUS from v$session where SADDR in(select SES_ADDR from v$transaction) and sid=1050;

no rows selected

此时还有部分事务在等待TX锁,稍等后再查询,之前被阻塞的事务全部完成。

SQL> select sid,serial#,machine,program,EVENT,SQL_ID,STATUS from v$session where SADDR in(select SES_ADDR from v$transaction);

SID SERIAL# MACHINE PROGRAM EVENT SQL_ID STATUS
---------- ---------- ---------- ------------------------- -------------------- ------------- ----------
1056 397 ABCSRV01 JDBC Thin Client
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇在物理dg中对RFS进程进行trace的.. 下一篇C++栈学习――顺序栈和链栈的区别

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: