Download presentation
Presentation is loading. Please wait.
Published byMartha Burdick Modified over 10 years ago
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.