Presentation is loading. Please wait.

Presentation is loading. Please wait.

Enqueue Waits : Locks. #.2 Copyright 2006 Kyle Hailey Wait Tree - Locks Waits Disk I/O Library Cache Enqueue Undo TX 6 Row Lock TX 4 ITL Lock HW Lock.

Similar presentations


Presentation on theme: "Enqueue Waits : Locks. #.2 Copyright 2006 Kyle Hailey Wait Tree - Locks Waits Disk I/O Library Cache Enqueue Undo TX 6 Row Lock TX 4 ITL Lock HW Lock."— Presentation transcript:

1 Enqueue Waits : Locks

2 #.2 Copyright 2006 Kyle Hailey Wait Tree - Locks Waits Disk I/O Library Cache Enqueue Undo TX 6 Row Lock TX 4 ITL Lock HW Lock Redo Buffer Cache SQL*Net TM 3 Row Lock ST Lock TS Lock TX 4 PK/FK

3 #.3 Copyright 2006 Kyle Hailey Enqueue Types  DDL Locks – Data Dictionary  Row Cache  Library Cache Locks  DML Locks – Data Locks  Row locks  Table Locks  Internal Structure Locks  High Water  Buffer Header  Sequence Cache  Space Transaction  Temporary Space

4 #.4 Copyright 2006 Kyle Hailey Statspack Top 5 Timed Events Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time -------------------------- ------------ ----------- ------ ------ Enqueue 42 126 3000 96.5 CPU time 4 2.8 db file sequential read 165 1 4.4 control file sequential read 214 0 1.1 log file switch completion 2 0 40.1 Top 5 Timed Events Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time -------------------------- ------------ ----------- ------ ------ Enqueue 42 126 3000 96.5 CPU time 4 2.8 db file sequential read 165 1 4.4 control file sequential read 214 0 1.1 log file switch completion 2 0 40.1 Need more info from v$session_wait

5 #.5 Copyright 2006 Kyle Hailey v$session_wait SQL> select event, p1,p2,p3 from v$session_wait; EVENT P1 P2 P3 ----------------- -------------- ---------- ---------- enqueue 1415053318 589855 1592 SQL> select event, p1,p2,p3 from v$session_wait; EVENT P1 P2 P3 ----------------- -------------- ---------- ---------- enqueue 1415053318 589855 1592 What can we do with this info? Note: v$session_wait is for current waits. Need ASH or some similar data source for historic analysis

6 #.6 Copyright 2006 Kyle Hailey Enqueue : Args  P1 = Type | mode  P2 = ID1, depends on P1  P3 = ID2, depends on P1

7 #.7 Copyright 2006 Kyle Hailey Translating P1 to Lock and Mode SQL> select p1, p1raw from v$session_wait where sid=151; P1 P1RAW ---------- -------- 1415053318 54580006 Mode Type

8 #.8 Copyright 2006 Kyle Hailey Translating P1 to Lock and Mode Type: 5458 P1RAW -------- 54580006 Hex Decimal ASCII 54 = 84 = “T” 58 = 88 = “X” Lock = TX 6 Mode: 0006

9 #.9 Copyright 2006 Kyle Hailey Translating P1 to Lock and Mode column Type format a4 column Mode format a4 select sid, chr(to_number(substr(p1raw,1,1)) * 16 + to_number(substr(p1raw,2,1))) || chr(to_number(substr(p1raw,3,1)) * 16 + to_number(substr(p1raw,4,1))) Type, substr(p1raw,8,1) as "Mode" from v$session_wait where name=‘enqueue’; SID TYPE Mode --- ---- ---- 151 TX 06

10 #.10 Copyright 2006 Kyle Hailey Translating p1 to Lock and Mode SELECT chr(bitand(p1,-16777216)/16777215)|| chr(bitand(p1, 16711680)/65535) "Lock", mod(p1,16) as "mode" FROM V$SESSION_WAIT Where sid=151 / bitand(p1, 65536) "Mode"

11 #.11 Copyright 2006 Kyle Hailey Translating P1 to Lock and Mode select sid, event, chr(bitand(P1,-16777216)/16777215)|| chr(bitand(P1,16711680)/65535) as "Type", mod(p1,16) as "mode" from v$session_wait where event = 'enqueue‘; select sid, event, chr(bitand(P1,-16777216)/16777215)|| chr(bitand(P1,16711680)/65535) as "Type", mod(p1,16) as "mode" from v$session_wait where event = 'enqueue‘; SID EVENT Ty mode P2 P3 --- ------- -- ---- ------- ---- 240 enqueue TX 6 2686995 433 SID EVENT Ty mode P2 P3 --- ------- -- ---- ------- ---- 240 enqueue TX 6 2686995 433

12 #.12 Copyright 2006 Kyle Hailey Modes 1 Null Null 2 SS Sub share 3 SX Sub exclusive 4 S Share 5 SSX Share/sub exclusive 6 X Exclusive

13 #.13 Copyright 2006 Kyle Hailey Types CF – Control File HW – High Water SQ - Sequence ST - Space Transaction TM - DML TS – Temporary Segment / Table Space TX –Transaction UL – DBMS_LOCK UN – User Named US – Undo Segment

14 #.14 Copyright 2006 Kyle Hailey Looking at v$lock select * from v$lock where type in ('TX', 'TM'); SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK --- -- ---------- ---------- ----- ------- ----- ----- 151 TX 589855 1592 0 6 4049 0 135 TM 53737 0 3 0 4058 0 151 TM 53737 0 3 0 4049 0 135 TX 589855 1592 6 0 4058 1 select * from v$lock where type in ('TX', 'TM'); SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK --- -- ---------- ---------- ----- ------- ----- ----- 151 TX 589855 1592 0 6 4049 0 135 TM 53737 0 3 0 4058 0 151 TM 53737 0 3 0 4049 0 135 TX 589855 1592 6 0 4058 1 TX ID1 = RBS seg# | RBS slot # ID2 = rbs wrap # TM ID1 = object id ID2 = 0

15 #.15 Copyright 2006 Kyle Hailey ID1 and ID2 Examples  Lock = TX  ID1 = RBS seg# | RBS slot #  ID2 = rbs wrap #  Lock = TM  ID1 = object id  ID2 = 0 ID1 and ID2 meanings can be determined from v$event_name in 10g

16 #.16 Copyright 2006 Kyle Hailey ID1 and ID2 Definitions column parameter1 format a15 column parameter2 format a15 column parameter3 format a15 column lock format a8 Select substr(name,1,7) as "lock",parameter1,parameter2,parameter3 from v$event_name where name like 'enq%' LOCK Parmeter1 Parmeter2(ID1) Parameter3(ID2) ------- --------- ------------- --------------- enq: CF name|mode 0 operation enq: HW name|mode table space # block enq: SQ name|mode object # 0 enq: ST name|mode 0 0 enq: TM name|mode object # table/partition enq: TS name|mode tablespace ID dba enq: TX name|mode usn<<16 | slot sequence

17 #.17 Copyright 2006 Kyle Hailey Enqueues Decoded in 10g  10gR2 waits distinguish 208 enqueues enq: DB - contention Administrative enq: HW - contention Configuration enq: KO - fast object checkpoint Application enq: PW - flush prewarm buffers Application enq: RO - contention Application enq: RO - fast object reuse Application enq: SQ - contention Configuration enq: SS - contention Configuration enq: ST - contention Configuration enq: TM - contention Application enq: TW - contention Administrative enq: TX - allocate ITL entry Configuration enq: TX - index contention Concurrency enq: TX - row lock contention Application enq: UL - contention Application enq: ZG - contention Administrative

18 #.18 Copyright 2006 Kyle Hailey Enqueue Solutions SQ – Sequence Lock logon/logoff problem TX - mode 6 – application problem Look at what application is doing Find SQL Look at locked data TX - mode 4 probably ITL problem find the object and SQL HW – High Water Look at object and SQL use LMT, freelists, pre-allocate extents, ST - Space Transaction only one per database used for space allocations uet, fet Find object use LMT UL - User Lock find out what application is doing

19 #.19 Copyright 2006 Kyle Hailey Enqueue Data Needed  If highest wait time is Enqueue,  Find out the kind of Enqueue and tune it  To tune enqueues we need one of the following to determine the type of enqueue  ASH Data  v$session_wait data  Sql Trace with waits

20 #.20 Copyright 2006 Kyle Hailey Blockers and Waiters SQL> select * from dba_blockers; HOLDING_SESSION --------------- 10 SQL> select * from dba_waiters; WAITING HOLDING LOCK_TYPE MODE_HELD MODE_REQUESTE LOCK_ID1 LOCK_ID2 ------- ------- ---------- ---------- ------------- -------- -------- 14 10 Transaction Exclusive Exclusive 458765 2379

21 #.21 Copyright 2006 Kyle Hailey V$session select sid, row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row#, lockwait from v$session; SID ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW# LOCKWAIT --- ------------- -------------- --------------- ------------- -------- 141 53651 3 53980 0 143 -1 0 0 0 144 -1 0 0 0 149 -1 0 0 0 151 53737 4 428 0 410343AC 10g Lockwait not null is blocker Pre-10g Lockwait not null is the waiter

22 #.22 Copyright 2006 Kyle Hailey Enqueue : TX 6 Example User 1 SQL> delete from emp where empno = 7934; User 2 SQL> update emp set sal=2000 Where empno = 7934;   Exclusive Row Level Lock

23 #.23 Copyright 2006 Kyle Hailey Enqueue : TX 6 v$session_wait SQL> select event, p1,p2,p3 from v$session_wait; EVENT P1 P2 P3 ----------------- -------------- ---------- ---------- enqueue 1415053318 589855 1592 SQL> select event, p1,p2,p3 from v$session_wait; EVENT P1 P2 P3 ----------------- -------------- ---------- ---------- enqueue 1415053318 589855 1592 What can we do with this info?

24 #.24 Copyright 2006 Kyle Hailey Enqueue : TX 6 Type and Mode select sid, event, chr(bitand(P1,-16777216)/16777215)|| chr(bitand(P1,16711680)/65535) as "Type", mod(p1,16) as "mode" from v$session_wait where event = 'enqueue‘; select sid, event, chr(bitand(P1,-16777216)/16777215)|| chr(bitand(P1,16711680)/65535) as "Type", mod(p1,16) as "mode" from v$session_wait where event = 'enqueue‘; SID EVENT Ty mode P2 P3 --- ------- -- ---- ------- ---- 240 enqueue TX 6 2686995 433 SID EVENT Ty mode P2 P3 --- ------- -- ---- ------- ---- 240 enqueue TX 6 2686995 433

25 #.25 Copyright 2006 Kyle Hailey Enqueue : TX 6 v$lock select * from v$lock where type in ('TX', 'TM'); SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK --- -- ---------- ---------- ----- ------- ----- ----- 151 TX 589855 1592 0 6 4049 0 135 TM 53737 0 3 0 4058 0 151 TM 53737 0 3 0 4049 0 135 TX 589855 1592 6 0 4058 1 select * from v$lock where type in ('TX', 'TM'); SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK --- -- ---------- ---------- ----- ------- ----- ----- 151 TX 589855 1592 0 6 4049 0 135 TM 53737 0 3 0 4058 0 151 TM 53737 0 3 0 4049 0 135 TX 589855 1592 6 0 4058 1 TX ID1 = RBS seg# | RBS slot # ID2 = rbs wrap # TM ID1 = object id ID2 = 0

26 #.26 Copyright 2006 Kyle Hailey Enqueue : TX 6 Blockers and Waiters SQL> select * from dba_blockers; HOLDING_SESSION --------------- 10 SQL> select * from dba_waiters; WAITING HOLDING LOCK_TYPE MODE_HELD MODE_REQUESTE LOCK_ID1 LOCK_ID2 ------- ------- ---------- ---------- ------------- -------- -------- 14 10 Transaction Exclusive Exclusive 458765 2379

27 #.27 Copyright 2006 Kyle Hailey Enqueue : TX 6 V$session select sid, row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row#, lockwait from v$session; SID ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW# LOCKWAIT --- ------------- -------------- --------------- ------------- -------- 141 53651 3 53980 0 143 -1 0 0 0 144 -1 0 0 0 149 -1 0 0 0 151 53737 4 428 0 410343AC 10g Lockwait not null is blocker Pre-10g Lockwait not null is the waiter

28 #.28 Copyright 2006 Kyle Hailey Enqueue : TX 4 User 1 SQL> insert into p values(3); User 2 SQL> insert into p values(3);   Index on p(id)

29 #.29 Copyright 2006 Kyle Hailey Enqueue : TX 4 select sid, event, chr(bitand(P1,-16777216)/16777215)|| chr(bitand(P1,16711680)/65535) as "Type", mod(p1,16) as "mode" from v$session_wait where event = 'enqueue‘; select sid, event, chr(bitand(P1,-16777216)/16777215)|| chr(bitand(P1,16711680)/65535) as "Type", mod(p1,16) as "mode" from v$session_wait where event = 'enqueue‘; SID EVENT Ty mode P2 P3 --- ------- -- ---- ------- ---- 240 enqueue TX 4 2686995 433 SID EVENT Ty mode P2 P3 --- ------- -- ---- ------- ---- 240 enqueue TX 4 2686995 433

30 #.30 Copyright 2006 Kyle Hailey Enqueue : TX 4 SQL> select sid, type, id1, id2, lmode, request from v$lock where type in ('TX', 'TM'); SID TY ID1 ID2 LMODE REQUEST ---------- -- ---------- ---------- ---------- ---------- 139 TX 327689 1901 0 4 146 TM 55166 0 3 0 146 TM 55168 0 2 0 139 TM 55166 0 3 0 139 TM 55168 0 2 0 139 TX 720914 168 6 0 146 TX 327689 1901 6 0

31 #.31 Copyright 2006 Kyle Hailey Enqueue : TX 4 - difficult Difficult – uses modifying different data  ITL  Unique Key  Bitmap Index Rare  Read only Tablespace  Free Lists  Two phase commit

32 #.32 Copyright 2006 Kyle Hailey Enqueue : TX 4 – ITL Data Block Header ITL Data Transaction 1 Info Transaction 2 Info

33 #.33 Copyright 2006 Kyle Hailey Enqueue : TX 4 – ITL Data Block Header Transaction 1 Data Data Block Header Transaction 2 Row 1 Row 2 Row 3 Transaction 3

34 #.34 Copyright 2006 Kyle Hailey Enqueue : TX 4 – ITL SQL> select sid, type, id1, id2, lmode, request from v$lock where type in ('TX', 'TM'); SID TY ID1 ID2 LMODE REQUEST ---------- -- ---------- ---------- ---------- ---------- 148 TX 65559 1284 0 4 135 TM 54557 0 3 0 151 TM 54557 0 3 0 148 TM 54557 0 3 0 135 TX 524312 1592 6 0 151 TX 65559 1284 6 0 SQL> select sid, type, id1, id2, lmode, request from v$lock where type in ('TX', 'TM'); SID TY ID1 ID2 LMODE REQUEST ---------- -- ---------- ---------- ---------- ---------- 148 TX 65559 1284 0 4 135 TM 54557 0 3 0 151 TM 54557 0 3 0 148 TM 54557 0 3 0 135 TX 524312 1592 6 0 151 TX 65559 1284 6 0

35 #.35 Copyright 2006 Kyle Hailey Enqueue : TX 4 – Unique Key User 1 create table parent ( id number primary key); create table child ( id number references parent, name varchar2(20)); insert into parent values (1); insert into child values (1,2); commit; delete from parent; User 2 insert into child values (1,2);   Exclusive Row Level Lock

36 #.36 Copyright 2006 Kyle Hailey Enqueue : TX 4 – Unique Key Parent Child ID IDName ValueID PK Session 1: Insert into Child ID=1 Session 2: Delete from Parent ID=2 : would require a FTS of child still not atomic, solution lock child Enqueue TX 4

37 #.37 Copyright 2006 Kyle Hailey Enqueue : TX 4 - Unique Key SQL> select sid, type, id1, id2, lmode, request from v$lock where type in ('TX', 'TM'); SID TY ID1 ID2 LMODE REQUEST ---------- -- ---------- ---------- ---------- --------- 151 TM 54548 0 2 0 151 TM 54550 0 3 0 151 TX 524306 1590 6 0 135 TM 54548 0 3 0 135 TM 54550 0 0 4 SQL> select sid, type, id1, id2, lmode, request from v$lock where type in ('TX', 'TM'); SID TY ID1 ID2 LMODE REQUEST ---------- -- ---------- ---------- ---------- --------- 151 TM 54548 0 2 0 151 TM 54550 0 3 0 151 TX 524306 1590 6 0 135 TM 54548 0 3 0 135 TM 54550 0 0 4

38 #.38 Copyright 2006 Kyle Hailey Enqueue : TX 4 – Unique Key Solution Parent Child ID IDName ValueID PK Session 1: Insert into Child ID=1 Session 2: Delete from Parent ID=2 OK – can verify quickly in the child index ID Index

39 #.39 Copyright 2006 Kyle Hailey Enqueue : TX 4 – V$session select sid, row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row#, lockwait from v$session; SID ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW# LOCKWAIT ----- ------------- -------------- --------------- ------------- -------- 135 -1 0 0 0 40B4EE1C 137 -1 0 0 0 138 -1 0 0 0 139 -1 0 0 0 140 -1 0 0 0 141 53651 3 53980 0 10g Lockwait not null is blocker Pre-10g Lockwait not null is the waiter

40 #.40 Copyright 2006 Kyle Hailey Enqueue : TX 4 – Bitmap Indexes  Two sessions update keys in same key range

41 #.41 Copyright 2006 Kyle Hailey Enqueue : ST  Space Transaction Lock  Used in Dictionary Managed Tables  Solution  Got to Locally Managed Tablespaces

42 #.42 Copyright 2006 Kyle Hailey Enqueue : HW Data Empty High Water Mark Header Table

43 #.43 Copyright 2006 Kyle Hailey Enqueue : HW select sid, event, chr(bitand(P1,-16777216)/16777215)|| chr(bitand(P1,16711680)/65535) as "Type", mod(p1,16) as "mode" from v$session_wait where event = 'enqueue‘; select sid, event, chr(bitand(P1,-16777216)/16777215)|| chr(bitand(P1,16711680)/65535) as "Type", mod(p1,16) as "mode" from v$session_wait where event = 'enqueue‘; SID EVENT Ty mode P2 P3 --- ------- -- ---- ---- ------- 240 enqueue HW 6 4 16777715 SID EVENT Ty mode P2 P3 --- ------- -- ---- ---- ------- 240 enqueue HW 6 4 16777715

44 #.44 Copyright 2006 Kyle Hailey Enqueue : HW  Use Freelists  Cause multiple jumps in High Water Mark  Pre-Allocate Extents  Alter table XXXX allocate extent;  Hidden Parameter  bump_highwater_mark_count  ASSM  Automatic segment space management


Download ppt "Enqueue Waits : Locks. #.2 Copyright 2006 Kyle Hailey Wait Tree - Locks Waits Disk I/O Library Cache Enqueue Undo TX 6 Row Lock TX 4 ITL Lock HW Lock."

Similar presentations


Ads by Google