Sie sind auf Seite 1von 64

Enqueue Waits : Locks

#.2

Locks
Locks REDO Lib Cache Buffer Cache Network

IO

Copyright 2006 Kyle Hailey

Enqueues = Locks
CI TM Buffer Cache Disk I/O Enqueue Waits Library Cache Redo ST SQL*Net Undo TS US
Copyright 2006 Kyle Hailey

#.3

TX - row lock contention TX - allocate ITL entry TX - index contention HW Locks Come in Many Types

SQ

Locks Covered in this Section


Part I  TM table modification  TX Transaction locks  UL user lock Part II  CI Cross Instance  CU Cursor Bind  HW High Water  RO Reusable Object  ST Space Transaction  TS Temporary Space
Copyright 2006 Kyle Hailey

#.4

#.5

Locks Can be Intractable


 Lock seems easy compared to latches or other esoteric waits, but they can be frustratingly intractable  Statspack & AWR lacks enough data to solve  To Solve, you need either
 Real  ASH

time

 Insolvable: No dependable way to find the blocking SQL


Copyright 2006 Kyle Hailey

Solving Enqueues
 Need SQL and Object/row
 Statspack

#.6

fails  V$active_session_history succeeds

 In real time can also use


 v$lock  v$session  dba_blockers  dba_waiters  ?/rdbms/admin/utllockt.sql  http://www.evdbt.com/enqwaits.sql

Copyright 2006 Kyle Hailey

Statspack 9i
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

#.7

Statspack is INSUFFICIENT, missing Who is blocked Who Blocks What blocks How they are blocked
Copyright 2006 Kyle Hailey

#.8

9i Investigation
Select * from v$event_name where name=enqueue; Parameter1 ---------Name|mode parameter2 ---------id1 parameter3 ---------id2

Copyright 2006 Kyle Hailey

#.9

9i Enqueue P1: Type and Mode


P1 P1RAW ---------- -------1415053318 54580006 Type: 5458
Hex Decimal 54 = 84 58 = 88 ASCII = T = X

Mode: 0006

Lock = TX 6
Copyright 2006 Kyle Hailey

#.10

9i Translating Lock and Mode


SELECT chr(bitand(p1,-16777216)/16777215)|| SELECT chr(bitand(p1, 16711680)/65535) Type, chr(bitand(p1,-16777216)/16777215)|| mod(p1,16) lmode fromchr(bitand(p1, 16711680)/65535) Type", v$session_wait where event=enqueue; mod(p1,16) as Mode"

from v$session_wait TY LMODE -- ---------Where event=enqueue TX 6 /

#.11

10g Translates all the Enquques


 9i
 One

Wait : enqueue

 10g
enqueue waits  Specific to each type of enqueue
enq: enq: enq: enq: enq: enq: enq: enq: enq: enq: HW SQ SS ST TM TW TX TX TX TX contention contention contention contention contention contention allocate ITL entry index contention row lock contention contention
Copyright 2006 Kyle Hailey

 208

Configuration Configuration Configuration Configuration Application Administrative Configuration Concurrency Application Application

Version 9 : P2 and P3
Parameter1 ---------Name|mode ID1 and ID2
 

#.12

parameter2 ---------id1

parameter3 ---------id2

had different meanings for each lock type Never defined

Defined in 10g  Parameter 2 = ID1  Parameter 3 = ID2


Copyright 2006 Kyle Hailey

Common Lock Types


Select event, parameter2 , parameter3 from v$event_name
Wait enq: enq: enq: enq: enq: enq: enq: enq: enq: enq: enq: enq: enq: enq: enq: enq: enq: Event Parameter2 Parameter3 CI - contention opcode type CF - contention 0 operation CU - contention handle handle HW - contention table space # block IM - contention for blr pool # 0 RO - contention 2 0 RO - fast object reuse 2 0 SQ - contention object # 0 ST - contention 0 0 TM - contention object # table/partition TS - contention tablespace ID dba TX - allocate ITL entry usn<<16 | slot sequence TX - contention usn<<16 | slot sequence TX - index contention usn<<16 | slot sequence TX - row lock contention usn<<16 | slot sequence UL - contention id 0 US - contention undo segment # 0

#.13

Copyright 2006 Kyle Hailey

Statspack 10g
5 Timed Events Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time ----------------------------- ------ -------- ------ -----enq: TX - row lock contention 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

#.14

10g Better, tells what kind of lock But still not who is blocked, who blocks them what they are blocked on
Copyright 2006 Kyle Hailey

#.15

V$active_session_history
Succeeds
 Who is waiting
SESSION_ID  SESSION_SERIAL#  USER_ID


 Who is the blocker


  

 On what object
CURRENT_OBJ#  CURRENT_FILE#  CURRENT_BLOCK#


BLOCKING_SESSION BLOCKING_SESSION_STATUS BLOCKING_SESSION_SERIAL#

 What is the Blocker SQL


not reliably possible  Maybe by dumping REDO


 With what SQL




SQL_ID

OEM externalize all of this


Copyright 2006 Kyle Hailey

OEM 10g

#.16

if P1 = 1415053318 then mode = 6 Then it is a data block row lock


Copyright 2006 Kyle Hailey

10g: find the lock mode


 P1 (parameter1) same for all locks
select distinct parameter1 from v$event_name where name like 'enq:%'

#.17

PARAMETER1 ---------name|mode select distinct event, p1, to_char(p1,'XXXXXXXX') p1raw to_char(p1,'XXXXXXXX') from v$active_session_history where event like ''enq:%; enq:%;
EVENT P1 ------------------------------ ---------enq: TX - row lock contention 1415053316 enq: TX - row lock contention 1415053318 enq: TX - allocate ITL entry 1415053316
Copyright 2006 Kyle Hailey

P1RAW --------54580004 54580006 54580004

P1 = name | mode
 P1 (parameter1) same for all locks
select distinct parameter1 from v$event_name where name like ''enq:%' enq:%'

#.18

select distinct event, p1, mod(p1,16) as "mode" from v$active_session_history where event like ''enq:%; enq:%;
EVENT ----------------------------enq: TX - allocate ITL entry enq: TX - row lock contention enq: TX - row lock contention

PARAMETER1 ---------name|mode

P1 mode ---------- ---1415053316 4 1415053318 6 1415053316 4

Copyright 2006 Kyle Hailey

#.19

Mode Cheat Sheet


TX if P1 = 1415053316 then mode = 4 if P1 = 1415053318 then mode = 6

Copyright 2006 Kyle Hailey

#.20

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

Transaction Locks (TX)


TX = Transaction = Wait on UNDO  Mode 6


#.21

modification of a row lock

 Mode 4
block spilt  Unique Index Key enforcement  Foreign key enforcement  ITL space waits  Bitmap chunk conflicts  Alter tablespace read only;  Free Lists slot waits  Possible with two phase commit
Copyright 2006 Kyle Hailey

 Index

Transaction Locks (TX)


9i Only had one TX lock, but 10g has 4:
1. enq: TX - allocate ITL entry
    

#.22

Wait on an ITL slot Index block split Mode 6 classic row lock Mode 4 - pk violation, fk violation, bitmap chunk wait

2. enq: TX - index contention 3. enq: TX - row lock contention 4. enq: TX contention

Wait for a data file extension, Alter tbs read only

Copyright 2006 Kyle Hailey

TX Lock
Session B
update toto set name = ADAMS where id = 1;

#.23

Wait for Tx To commit

Undo Segment Header

Table Toto Data Block Data Block Header Header Transaction 1 Session a Row 1

Undo Segment

update toto set name = SMITH where id = 1; Delete from toto where id =
Copyright 2006 Kyle Hailey

2; Delete from toto where id = 9;

#.24

enq: TX - row lock contention


Mode 6, row in data block only one reason

User 1 SQL> delete from toto where id = 1;

User 2

SQL> delete from toto where id =1; --hang SQL> Delete from titi Where id = 1;
Copyright 2006 Kyle Hailey

enq: TX - row lock contention

#.25

if P1 = 1415053318 then mode = 6 Then it is a data block row lock

Copyright 2006 Kyle Hailey

#.26

enq: TX - row lock contention


TX Mode 6
Table ID 1 Value foo Session 1: delete where id = 1; no commit Session 2: delete where id = 1 ; Enqueue TX 6

Copyright 2006 Kyle Hailey

#.27

TX Mode 4

if P1 = 1415053316 then mode = 4 Not same data but conflicts


Copyright 2006 Kyle Hailey

#.28

enq: TX - row lock contention


Mode 4, happens for 3 reasons 1. Unique key contention 2. Foreign Key contention 3. Bitmap index contention (others?)

Copyright 2006 Kyle Hailey

#.29

1. enq: TX - row lock contention


Mode 4 , unique index

User 1 create table p(n number); create unique index p_i on p(n); insert into p values(3);

User 2

insert into p values(3); --hang

Copyright 2006 Kyle Hailey

#.30

1. enq: TX - row lock contention


PK ID 2? Table ID Value 2?
Mode 4 , unique index

Session 1: Insert key no commit Session 2: Insert into same key : Enqueue TX 4
Copyright 2006 Kyle Hailey

#.31

2. enq: TX - row lock contention


Mode 4, foreign key

User 8 create table parent ( id number primary key); create table child ( id number references parent, name varchar2(20)); insert into parent values (2);

User 10

insert into child values (2,88); -- hang


Copyright 2006 Kyle Hailey

2. enq: TX - row lock contention


TX 4 - Foreign Key PK ID 2? Parent ID Value 2? Child ID Name 2

#.32

Foreign Key Session 1: Insert key into parent no commit Session 2: Insert into child same key : Enqueue TX 4
Copyright 2006 Kyle Hailey

#.33

3. enq: TX - row lock contention


 Mode 4  Bitmaps are compressed  Changes to the same bitmap cause locks
Value 1 2
000.000.0000 000.000.000

Start End Bitmap Rowid Rowid 01010000111000011100001100


000.000.0000 000.000.000

01010000111000011100001100

Copyright 2006 Kyle Hailey

#.34

3. enq: TX - row lock contention


Session 1 create table t1 ( n1 number(4), n2 number(4)); insert into t1 select 1, rownum from all_objects where rownum <= 400; commit; create bitmap index i1 on t1(n1); update t1 set n1 = 2 where n2 = 12; Different rows but same key value

Session 2 update t1 set n1 = 2 where n2 = 13;


Copyright 2006 Kyle Hailey

3. enq: TX - row lock contention


 Bitmaps are compressed  Changes to the same bitmap chunk cause locks
Value 1 1
205.0 210.3

#.35

Start End Bitmap Rowid Rowid 01010000111000011100001100


200.0 204.7

01010000111000011100001100 01010000111000011100001100
200.0 205.6

block

row
Copyright 2006 Kyle Hailey

#.36

3. enq: TX - row lock contention


Value 1 2
205.0 210.3

Start End Bitmap Rowid Rowid 01010000111000011100001100


200.0 204.7

01010000111000011100001100 01010000111000011100001100
200.0 205.6

Session 1 Update id=800 set value 2

Session 2 Update id=3 set value 2

Copyright 2006 Kyle Hailey

#.37

Summary: TX 4 from ASH


uniq index ST EVENT ----- ---------------------10:39 enq: TX - row lock c 10:39 enq: TX - row lock c 10:39 enq: TX - row lock c 10:39 enq: TX - row lock c FK (10.2.0.3) ST EVENT ----- ---------------------10:41 enq: TX - row lock c 10:41 enq: TX - row lock c 10:41 enq: TX - row lock c bitmap ST EVENT ----- ---------------------10:41 enq: TX - row lock c 10:41 enq: TX - row lock c 10:41 enq: TX - row lock c 10:41 enq: TX - row lock c SID LM P2 P3 OBJ OTYPE FN BLOCKN SQL_ID --- --- ------ ---- ----- ----- --- ------ -141 4 655406 6672 -1 0 0 bjvx94vnxtxgv 141 4 655406 6672 -1 0 0 bjvx94vnxtxgv 141 4 655406 6672 -1 0 0 bjvx94vnxtxgv 141 4 655406 6672 -1 0 0 bjvx94vnxtxgv BSID 158 158 158 158

SID LM P2 P3 OBJ --- --- ------ ---- ----144 4 179681 7074 CHILD 144 4 179681 7074 CHILD 144 4 179681 7074 CHILD

OTYPE FN BLOCKN SQL_ID ----- --- ------ -TABLE 1 60954 ahm7c9rupbz9r TABLE 1 60954 ahm7c9rupbz9r TABLE 1 60954 ahm7c9rupbz9r

BSID 1 1 1

SID LM P2 P3 OBJ --- --- ------ ---- ----143 4 966081 4598 I1 143 4 966081 4598 I1 143 4 966081 4598 I1 143 4 966081 4598 I1

OTYPE FN BLOCKN SQL_ID ----- --- ------ -INDEX 0 0 azav296xxqcjx INDEX 0 0 azav296xxqcjx INDEX 0 0 azav296xxqcjx INDEX 0 0 azav296xxqcjx

BSID 144 144 144 144

Copyright 2006 Kyle Hailey

#.38

enq: TX - allocate ITL entry


Transaction 1 Info Data Block Data Block Header Header ITL Transaction 2 Info

Data

Copyright 2006 Kyle Hailey

#.39

enq: TX - allocate ITL entry


Data Block Data Block Header Header Transaction 1 Transaction 2 Row 3 Row 2 Data Row 1 Transaction 3

Copyright 2006 Kyle Hailey

#.40

enq: TX - allocate ITL entry


create table itl ( id number, data varchar2(20) ) pctfree 0 initrans 1 ; insert into itl select rownum,'a' from all_objects where rownum < 2000; commit; session session session session session 1: 2: 3: 4: 5: update update update update update itl itl itl itl itl set set set set set data=data data=data data=data data=data data=data where where where where where id=1; id=2; id=3; id=4; id=5;

Copyright 2006 Kyle Hailey

#.41

enq: TX - contention
Example  Session 1 start transaction, dont commit  Session 2 alter tablespace read only Example Data File Extension waiter waitng for another session to extend file Index Block Split waiter waiting for another session to split the block Others ?
 Free Lists
  

Non-ASSM Sessions freeing block If no txs free lists available (min 16, grow up depending on block size) , pick one and wait TX 4 First does a prepare the commit Any read or write access in the intervening time waits TX 4
Copyright 2006 Kyle Hailey

 2PC two phase commit


 

TX Further Investigation
select event, sql_id, sql_id, CURRENT_OBJ# || ' ' || name obj ,CURRENT_FILE# file# ,CURRENT_BLOCK# block# from v$active_session_history ash, obj$ obj$ o where event like ''enq: TX%' enq: and o.obj# (+)= ash.current_obj# ash.current_obj# order by sample_time
SQL_ID ------------ahm7c9rupbz9r bjvx94vnxtxgv ahm7c9rupbz9r bjvx94vnxtxgv ahm7c9rupbz9r

#.42

EVENT -----------------------------enq: TX - row lock contention enq: TX - row lock contention enq: TX - row lock contention enq: TX - row lock contention enq: TX - row lock contention

OBJ FILE# BLOCK# --------- --- -----53363 FOO 1 123586 53363 FOO 1 123586 53363 FOO 1 123586 53363 FOO 1 123586 53363 FOO 1 123586

Copyright 2006 Kyle Hailey

#.43

TX Further Investigation
Who is the blocker:

V$active_session_history : BLOCKING_SESSION BLOCKING_SESSION_STATUS BLOCKING_SESSION_SERIAL#

No Guarentee of finding blocker SQL


Copyright 2006 Kyle Hailey

#.44

enq: TM - contention
 TX locks have a corresponding TM lock  TM locks the structure from change
 Parameter1

= object id
Parmeter2(ID1) ------------object # Parameter3(ID2) --------------table/partition

LOCK ------enq: TM

Parmeter1 --------name|mode

Copyright 2006 Kyle Hailey

#.45

enq: TM - contention
Exclusive Row Level Lock

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 parent values (2); commit; delete from parent where id=2;

User 2

insert into child values (1,2);

Copyright 2006 Kyle Hailey

#.46

enq: TM - contention
PK ID 1 X 2 Parent ID 1 X 2 Value Child ID Name 1

Session 1 Session 2

Insert into Child ID=1 Delete from Parent where ID=2 :

Enqueue TM 4 Session 2 doesnt know the value Session 1 inserted Session 2 only knows there is an outstanding change
Copyright 2006 Kyle Hailey

PK ID 1 2

Parent ID

enq: TM contention Solution


Index ID 1 Child ID Name Value

#.47

Foreign Key Session 1: Insert into Child ID=1 Session 2: Delete from Parent ID=2 OK can verify quickly in the child index
Copyright 2006 Kyle Hailey

TM Further Investigation
select event, sql_id, sql_id, mod(p1,16) as "mode", p2|| ' ' || o.name obj from v$active_session_history ash, obj$ obj$ o where event like ''enq: TM%' enq: and o.obj# (+)= ash.p2 order by sample_time; sample_time;
EVENT -----------------------------enq: TM - contention enq: TM - contention enq: TM - contention enq: TM - contention enq: TM - contention enq: TM - contention

#.48

SQL_ID mode OBJ ------------- ---- --------------8zw36yw3fq4yy 4 53372 CHILD 8zw36yw3fq4yy 4 53372 CHILD 8zw36yw3fq4yy 4 53372 CHILD 8zw36yw3fq4yy 4 53372 CHILD 8zw36yw3fq4yy 4 53372 CHILD 8zw36yw3fq4yy 4 53372 CHILD

Copyright 2006 Kyle Hailey

#.49

UL Locks
 User-defined Locks
 dbms_lock
Wait Event enq: UL - contention Parameter2 id Parameter3 0

dbms_lock.allocate_unique(v_lockname, v_lockhandle); dbms_lock.request(v_lockhandle, p_ltype); dbms_lock.release(v_lockhandle);

Copyright 2006 Kyle Hailey

Internal Locks
 CI Cross Instance  CU Cursor Bind  HW High Water  RO Reuse Object  ST Space Transaction

#.50

Copyright 2006 Kyle Hailey

#.51

enq: CI - contention
 Cross Instance  not OPS lock.  invoke actions in background processes
  

checkpoints log switches instance is shut down

Copyright 2006 Kyle Hailey

#.52

CI Cross Instance
Id1 Meaning (parameter2)
0 Flush buffers for reuse as new class 1 LGWR checkpointing and Hot Backup 2 DBWR synchronization of SGA with control file 3 Log file add/drop/rename notification 4 Write buffer for CR read 5 Test Call 6 Invalidate KCK cache in all instances 7 Alter rollback segment optimal 8 Signal Query Servers/coordinator 9 Create Remote Parallel Query Server 10 Set Global Partitions 11 Stop Disk Writes 12 Drop Sort Segments 13 Release unused space from Sort Segments 14 Instance Recovery for Parallel operation Group 15 Validate parallel slave Lock Value 16 Check Transaction State Objects

Id2 Meaning (parameter3)


1 Pass in Parameters 2 Invoke the call in background process 3 Foreground has not returned yet 4 Used to allocate the CI call 5 Used to queue up interested clients

Copyright 2006 Kyle Hailey

CI Locks
select substr(sql_text,0,20) sql_text, substr(sql_text,0,20) sql_text, p2,p3, CURRENT_OBJ# || ' ' || name obj ,CURRENT_FILE# file# ,CURRENT_BLOCK# block# from v$active_session_history ash, obj$ obj$ o, v$sqltext sql where event like ''enq: CI%' enq: and o.obj# (+)= ash.current_obj# ash.current_obj# and sql.sql_id (+)= ash.sql_id order by sample_time; sample_time;
SQL_TEXT P2 P3 OBJ FILE# BLOCK# -------------------- ----- ------- ------------ ------ ------INSERT INTO TOTO1 VA 1 5 54225 TOTO1 6 682721
Copyright 2006 Kyle Hailey

#.53

CI Locks
SQL_TEXT P2 P3 ---------------------------------------- --- -alter table XXXXX drop partition YYYYY 1 5 ID1 = 2 " LGWR checkpointing and Hot Backup " ID2 = 5. "Used to queue up interested clients"

#.54

If p2=1 and p3=5, then contention on blocks being checkpointed, try raising fast_start_mttr_target alter system set fast_start_mttr_target=600 scope=both;
Copyright 2006 Kyle Hailey

#.55

enq: CU - contention
cursor bind From Jonathan Lewis:  Protects the variable definitions while the cursor is being optimized.
 8i

one CU per bind  9i one CU per cursor

Copyright 2006 Kyle Hailey

enq: HW - contention
Wait Event enq: HW - contention Parameter2 table space # Parameter3 block

#.56

Session 1 Session 2

Header

Table
Data Session 3

High Water Mark Empty


Copyright 2006 Kyle Hailey

HW
 Use Freelists


#.57

Cause multiple jumps in High Water Mark Alter table XXXX allocate extent;

 Pre-Allocate Extents


 Hidden Parameter
_bump_highwater_mark_count  alter session set "_bump_highwater_mark_count"=100;



Not supported Automatic segment space management

 ASSM


 Partition Object

Copyright 2006 Kyle Hailey

HW Further Investigation
select event, sql_id, CURRENT_OBJ# || ' ' || name obj ,CURRENT_FILE# file# ,CURRENT_BLOCK# block# from v$active_session_history ash, obj$ o where event like 'enq: HW%' and o.obj# (+)= ash.current_obj# order by sample_time;

#.58

EVENT SQL_ID OBJ FILE# BLOCK# -------------------- ------------- ----------- ----- -----enq: HW - contention 49ch3jfkncnsp 53410 T1_I1 13 29734
Copyright 2006 Kyle Hailey

#.59

enq: KO - fast object checkpoint


 Used when checking the cache for blocks from a table for PQO direct read

Copyright 2006 Kyle Hailey

enq: RO - fast object reuse


 Drop or Truncate a table
 Wait

#.60

for DBWR to clean cache

 Solution
cache  Tune DBWR using smaller MTTR  Use GTT  Truncate/drop less often alter system set fast_start_mttr_target=17 scope=both;
SELECT TARGET_MTTR, ESTIMATED_MTTR, CKPT_BLOCK_WRITES FROM V$INSTANCE_RECOVERY
Copyright 2006 Kyle Hailey

 Smaller

#.61

enq: ST - contention
Space Transaction management lock  Space Transaction Lock  Allocating/deallocating extents  Dictionary Managed Tablespaces  Id1, Id2 Combinations:
 Always

0, Always 0.

 Solution
 Got

to Locally Managed Tablespaces


Copyright 2006 Kyle Hailey

Other Resources

#.62

@?/rdbms/admin/utllockt @?/rdbms/admin/utllockt
WAITING_SESSION LOCK_TYPE MODE_REQUESTED MODE_HELD LOCK_ID1 LOCK_ID2 --------------- ----------- -------------- --------- --------- -------144 139 None Transaction Share Copyright 2006 Kyle Hailey Exclusive 131113 7507

Blocking Sessions

#.63

Copyright 2006 Kyle Hailey

Summary : Internal Locks


 CI Cross Instance  CU Cursor Bind  HW High Water
  

#.64

Look at object and SQL use LMT, freelists, pre-allocate extents PQO

 KO fast object checkpoint

 RO reusable object



Reduce cache, tune DBWR, use GTT


logon/logoff problem only one per database used for space allocations uet, fet Find object use LMT
Copyright 2006 Kyle Hailey

 SQ Sequence Lock  ST - Space Transaction


   

Das könnte Ihnen auch gefallen