Você está na página 1de 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 TX - row lock contention TX - allocate ITL entry TX - index contention

#.3

Waits

Library Cache
Redo

HW
ST

Locks
Come in Many

SQL*Net Undo

TS US
Copyright 2006 Kyle Hailey

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, v$session_wait 16711680)/65535) Type", 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
208 enq: enq: enq: enq: enq: enq: enq: enq: enq: enq: HW SQ SS ST TM TW TX TX TX TX

enqueue waits Specific to each type of enqueue


contention contention contention contention contention contention allocate ITL entry index contention row lock contention contention
Copyright 2006 Kyle Hailey

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 from v$active_session_history where event like '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:%'

#.18

select distinct event, p1, mod(p1,16) as "mode" from v$active_session_history where event like '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 Mode 4
Index

#.21

modification of a row lock

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

Transaction Locks (TX)


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

#.22

Wait on an ITL slot

Index block split

4. enq: TX contention

Mode 6 classic row lock Mode 4 - pk violation, fk violation, bitmap chunk wait 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

Undo Segment

Session a
update toto set name = SMITH where id = 1;

Row 1

Delete from toto where id = 2;


Copyright 2006 Kyle Hailey

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; SQL> delete from toto where id =1; --hang SQL> Delete from titi Where id = 1;
Copyright 2006 Kyle Hailey

User 2

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); insert into p values(3); --hang

User 2

Copyright 2006 Kyle Hailey

#.30

1. enq: TX - row lock contention


PK Table

ID 2?

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 Parent Child ID Name 2

#.32

ID 2?

ID Value 2?

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 Start End Bitmap Rowid Rowid 01010000111000011100001100
000.000.0000 000.000.000

1
2

01010000111000011100001100
000.000.0000 000.000.000

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, CURRENT_OBJ# || ' ' || name obj ,CURRENT_FILE# file# ,CURRENT_BLOCK# block# from v$active_session_history ash, obj$ o where event like 'enq: TX%' and o.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;
Copyright 2006 Kyle Hailey

User 2

insert into child values (1,2);

#.46

enq: TM - contention
PK Parent Child ID Name 1

ID 1 X 2

ID 1 X 2

Value

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

enq: TM contention Solution


PK Parent Index ID 1 Child ID Name

#.47

ID 1 2

ID

Value

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, mod(p1,16) as "mode", p2|| ' ' || o.name obj from v$active_session_history ash, obj$ o where event like 'enq: TM%' and o.obj# (+)= ash.p2 order by 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, p2,p3, CURRENT_OBJ# || ' ' || name obj ,CURRENT_FILE# file# ,CURRENT_BLOCK# block# from v$active_session_history ash, obj$ o, v$sqltext sql where event like 'enq: CI%' and o.obj# (+)= ash.current_obj# and sql.sql_id (+)= ash.sql_id order by sample_time;
SQL_TEXT P2 P3 OBJ FILE# BLOCK# -------------------- ----- ------- ------------ ------ ------INSERT INTO TOTO1 VA 1 5 54225 TOTO1 6 682721

#.53

Copyright 2006 Kyle Hailey

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
Smaller

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

#.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
WAITING_SESSION LOCK_TYPE MODE_REQUESTED MODE_HELD LOCK_ID1 LOCK_ID2 --------------- ----------- -------------- --------- --------- -------144 139 None Transaction Share Exclusive 131113 7507

Copyright 2006 Kyle Hailey

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

Você também pode gostar