Skip to Main Content

Oracle Database Discussions

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

How to analyze or trouble-shooting event 'enq: TX - row lock contention' ?

Quanwen ZhaoJun 5 2018 — edited Jun 11 2018

Hi, experts

Yesterday afternoon our production system (oracle db server 11.2.0.4.0 for Linux x86_64) has produced a large amount of wait event 'enq: TX - row lock contention'. Please take a look at my several screenshots as follows,

01.png

02.png

03.png

To restore business as soon as possible, afterwards I manually killed all of the OS processes that produced row lock contention immediately. The following is that command I executed on Linux,

select 'kill -9 '||pro.spid from v$session ses,v$process pro where ses.paddr=pro.addr and ses.event='enq: TX - row lock contention';

Now I wanna detailedly and seriously analyze (or try to trouble-shooting) this wait event "enq: TX - row lock contention".

Therefore I've done some operation steps below,

SQL> set linesize 200

SQL> set pagesize 80

SQL> col name for a35

SQL> col parameter1 for a10

SQL> col parameter2 for a15

SQL> col parameter3 for a10

SQL> col wait_class for a15

SQL> select name,parameter1,parameter2,parameter3,wait_class from v$event_name

2 where name = 'enq: TX - row lock contention';

NAME PARAMETER1 PARAMETER2 PARAMETER3 WAIT_CLASS

----------------------------------- ---------- --------------- ---------- ---------------

enq: TX - row lock contention name|mode usn<<16 | slot sequence Application

SQL> select p1,p2,p3,count(*) from dba_hist_active_sess_history where event = 'enq: TX - row lock contention'

2 and sample_time between to_date('2018-06-04 14:25:00','yyyy-mm-dd hh24:mi:ss') and to_date('2018-06-04 15:00:00','yyyy-mm-dd hh24:mi:ss')

3 group by p1,p2,p3;

    P1         P2         P3   COUNT(\*)

---------- ---------- ---------- ----------

1415053318 520552481 119254 637908

SQL> set linesize 200

SQL> set pagesize 80

SQL> select sql_id,p1,p2,p3,count(*) from dba_hist_active_sess_history where event = 'enq: TX - row lock contention'

2 and sample_time between to_date('2018-06-04 14:25:00','yyyy-mm-dd hh24:mi:ss') and to_date('2018-06-04 15:00:00','yyyy-mm-dd hh24:mi:ss')

3 group by sql_id,p1,p2,p3

4 order by count(*) desc,sql_id;

SQL_ID P1 P2 P3 COUNT(*)

-------------------------- ---------- ---------- ---------- ----------

63954ds96t1f7 1415053318 520552481 119254 595737

22k24vv4ympzt 1415053318 520552481 119254 37401

cby0uf10phk6s 1415053318 520552481 119254 1169

136232yf7z8dx 1415053318 520552481 119254 919

aykqhhdaj2jzf 1415053318 520552481 119254 428

btq5r9uuyt6uz 1415053318 520552481 119254 402

gvabkmzyn0b5b 1415053318 520552481 119254 313

cwh6q2r5w91nm 1415053318 520552481 119254 244

6gvybub3khmwv 1415053318 520552481 119254 207

fvuprmvsd0nah 1415053318 520552481 119254 198

b0x6hj9j6tkwp 1415053318 520552481 119254 158

5fpgrfk0zn731 1415053318 520552481 119254 139

4247tzrpqxyfy 1415053318 520552481 119254 116

9mdz97fybw44f 1415053318 520552481 119254 106

5z0kdxr784w0f 1415053318 520552481 119254 102

d4n09t7xwa60f 1415053318 520552481 119254 78

a9tbydrg7yac8 1415053318 520552481 119254 60

99bnmc0h62qc5 1415053318 520552481 119254 44

62b3h3f8bry9u 1415053318 520552481 119254 35

afb1jdqkuuafn 1415053318 520552481 119254 34

9x35f91jfazjt 1415053318 520552481 119254 18

21 rows selected.

SQL> SELECT D.SQL_ID,CHR(BITAND(P1, -16777216) / 16777215) || CHR(BITAND(P1, 16711680) / 65535) "Lock",

2 BITAND(P1, 65535) "Mode", COUNT(1),COUNT(DISTINCT d.session_id)

3 FROM DBA_HIST_ACTIVE_SESS_HISTORY D

4 WHERE D.SAMPLE_TIME BETWEEN TO_DATE('2018-06-04 14:25:00', 'YYYY-MM-DD HH24:MI:SS') AND

5 TO_DATE('2018-06-04 15:00:00', 'YYYY-MM-DD HH24:MI:SS')

6 AND D.EVENT = 'enq: TX - row lock contention'

GROUP BY D.SQL_ID,(CHR(BITAND(P1, -16777216) / 16777215) || CHR(BITAND(P1, 16711680) / 65535)),(BITAND(P1, 65535))

8 ORDER BY COUNT(1) DESC,COUNT(DISTINCT d.session_id) DESC;

SQL_ID Lock Mode COUNT(1) COUNT(DISTINCTD.SESSION_ID)

-------------------------- ---------------- ---------- ---------- ---------------------------

63954ds96t1f7 TX 6 595737 8802

22k24vv4ympzt TX 6 37401 477

cby0uf10phk6s TX 6 1169 10

136232yf7z8dx TX 6 919 7

aykqhhdaj2jzf TX 6 428 4

btq5r9uuyt6uz TX 6 402 3

gvabkmzyn0b5b TX 6 313 3

cwh6q2r5w91nm TX 6 244 2

6gvybub3khmwv TX 6 207 5

fvuprmvsd0nah TX 6 198 2

b0x6hj9j6tkwp TX 6 158 1

5fpgrfk0zn731 TX 6 139 1

4247tzrpqxyfy TX 6 116 2

9mdz97fybw44f TX 6 106 4

5z0kdxr784w0f TX 6 102 1

d4n09t7xwa60f TX 6 78 1

a9tbydrg7yac8 TX 6 60 4

99bnmc0h62qc5 TX 6 44 1

62b3h3f8bry9u TX 6 35 1

afb1jdqkuuafn TX 6 34 1

9x35f91jfazjt TX 6 18 1

21 rows selected.

And next, how to do it continuously for me ?

Very appreciate you if any help.

Best Regards

Quanwen Zhao

This post has been answered by AndrewSayer on Jun 5 2018
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jul 6 2018
Added on Jun 5 2018
20 comments
16,482 views