Presentation is loading. Please wait.

Presentation is loading. Please wait.

Enqueue Waits : Locks. #.2 Copyright 2006 Kyle Hailey Locks REDO Lib Cache Buffer Cache IO Locks Network.

Similar presentations


Presentation on theme: "Enqueue Waits : Locks. #.2 Copyright 2006 Kyle Hailey Locks REDO Lib Cache Buffer Cache IO Locks Network."— Presentation transcript:

1 Enqueue Waits : Locks

2 #.2 Copyright 2006 Kyle Hailey Locks REDO Lib Cache Buffer Cache IO Locks Network

3 #.3 Copyright 2006 Kyle Hailey Enqueues = Locks Waits Disk I/O Library Cache Enqueue Undo TX - row lock contention TX - allocate ITL entry HW Redo Buffer Cache SQL*Net TM ST TS TX - index contention US CI SQ Locks Come in ManyTypes

4 #.4 Copyright 2006 Kyle Hailey 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

5 #.5 Copyright 2006 Kyle Hailey 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 time  ASH  Insolvable: No dependable way to find the blocking SQL

6 #.6 Copyright 2006 Kyle Hailey Solving Enqueues  Need SQL and Object/row  Statspack fails  V$active_session_history succeeds  In “real time” can also use  v$lock  v$session  dba_blockers  dba_waiters  ?/rdbms/admin/utllockt.sql 

7 #.7 Copyright 2006 Kyle Hailey Statspack 9i Top 5 Timed Events Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time Enqueue CPU time db file sequential read control file sequential read log file switch completion Top 5 Timed Events Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time Enqueue CPU time db file sequential read control file sequential read log file switch completion Statspack is INSUFFICIENT, missing  Who is blocked  Who Blocks  What blocks  How they are blocked

8 #.8 9i Investigation Select * from v$event_name where name=‘enqueue’; Copyright 2006 Kyle Hailey Parameter1 parameter2 parameter Name|mode id1 id2

9 #.9 Copyright 2006 Kyle Hailey 9i Enqueue P1: Type and Mode Type: 5458 P1 P1RAW Hex Decimal ASCII 54 = 84 = “T” 58 = 88 = “X” Lock = TX 6 Mode: 0006

10 #.10 9i Translating Lock and Mode SELECT chr(bitand(p1, )/ )|| chr(bitand(p1, )/65535) “Type", mod(p1,16) as “Mode" from v$session_wait Where event=‘enqueue’ / SELECT chr(bitand(p1, )/ )|| chr(bitand(p1, )/65535) Type, mod(p1,16) lmode from v$session_wait where event=‘enqueue’; TY LMODE TX 6 SELECT chr(bitand(p1, )/ )|| chr(bitand(p1, )/65535) Type, mod(p1,16) lmode from v$session_wait where event=‘enqueue’; TY LMODE TX 6

11 #.11 Copyright 2006 Kyle Hailey 10g Translates all the Enquques  9i  One Wait : “enqueue”  10g  208 enqueue waits  Specific to each type of enqueue enq: HW - contention Configuration 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: TX – contention Application

12 #.12 Version 9 : P2 and P3 ID1 and ID2  had different meanings for each lock type  Never defined Defined in 10g  Parameter 2 = ID1  Parameter 3 = ID2 Copyright 2006 Kyle Hailey Parameter1 parameter2 parameter Name|mode id1 id2

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

14 #.14 Copyright 2006 Kyle Hailey Statspack 10g 5 Timed Events Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time enq: TX - row lock contention CPU time db file sequential read control file sequential read log file switch completion Timed Events Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time enq: TX - row lock contention CPU time db file sequential read control file sequential read log file switch completion g Better, tells what kind of lock But still not who is blocked, who blocks them what they are blocked on

15 #.15 Copyright 2006 Kyle Hailey V$active_session_history Succeeds  Who is waiting  SESSION_ID  SESSION_SERIAL#  USER_ID  On what object  CURRENT_OBJ#  CURRENT_FILE#  CURRENT_BLOCK#  With what SQL  SQL_ID   Who is the blocker   BLOCKING_SESSION   BLOCKING_SESSION_STATUS   BLOCKING_SESSION_SERIAL#   What is the Blocker SQL   not reliably possible   Maybe by dumping REDO OEM externalize all of this

16 #.16 Copyright 2006 Kyle Hailey OEM 10g if P1 = then mode = 6 Then it is a data block row lock

17 #.17 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:%' PARAMETER name|mode select distinct event, p1, to_char(p1,'XXXXXXXX') p1raw from v$active_session_history where event like 'enq:%‘; EVENT P1 P1RAW enq: TX - row lock contention enq: TX - row lock contention enq: TX - allocate ITL entry

18 #.18 Copyright 2006 Kyle Hailey P1 = name | mode  P1 (parameter1) same for all locks select distinct parameter1 from v$event_name where name like 'enq:%' select distinct event, distinct event, p1, p1, mod(p1,16) as "mode" mod(p1,16) as "mode" from v$active_session_history from v$active_session_history where event like 'enq:%‘; where event like 'enq:%‘; EVENT P1 mode enq: TX - allocate ITL entry enq: TX - row lock contention enq: TX - row lock contention PARAMETER name|mode

19 #.19 Copyright 2006 Kyle Hailey Mode Cheat Sheet TX if P1 = then mode = 4 if P1 = then mode = 6

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

21 #.21 Copyright 2006 Kyle Hailey Transaction Locks (TX) TX = Transaction = Wait on UNDO  Mode 6  modification of a row lock  Mode 4  Index 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

22 #.22 Copyright 2006 Kyle Hailey Transaction Locks (TX) 9i Only had one TX lock, but 10g has 4: 1.enq: TX - allocate ITL entry  Wait on an ITL slot 2.enq: TX - index contention  Index block split 3.enq: TX - row lock contention  Mode 6 – classic row lock  Mode 4 - pk violation, fk violation, bitmap chunk wait 4.enq: TX – contention  Wait for a data file extension, Alter tbs read only

23 #.23 Copyright 2006 Kyle Hailey TX Lock update toto set name = ‘SMITH’ where id = 1; UndoSegment Session a Data Block Header Transaction 1 Data Block Header Row 1 Table Toto UndoSegmentHeader Session B update toto set name = ‘ADAMS’ where id = 1; Wait for Tx To commit Delete from toto where id = 2; Delete from toto where id = 9;

24 #.24 Copyright 2006 Kyle Hailey enq: TX - row lock contention User 1 SQL> delete from toto where id = 1; User 2 SQL> delete from toto where id =1; --hang   Mode 6, row in data block – only one reason Delete from titi SQL> Delete from titi Where id = 1;

25 #.25 Copyright 2006 Kyle Hailey enq: TX - row lock contention if P1 = then mode = 6 Then it is a data block row lock

26 #.26 Copyright 2006 Kyle Hailey enq: TX - row lock contentionTableValue ID foo Session 1: delete where id = 1; no commit no commit Session 2: delete where id = 1 ; Enqueue TX 6 Enqueue TX 6 1 TX Mode 6

27 #.27 Copyright 2006 Kyle Hailey TX – Mode 4 if P1 = then mode = 4 Not same data but conflicts

28 #.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 #.29 Copyright 2006 Kyle Hailey 1.enq: TX - row lock contention 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   Mode 4, unique index

30 #.30 Copyright 2006 Kyle Hailey 1.enq: TX - row lock contention Table IDValueID PK Session 1: Insert key no commit no commit 2 ? Session 2: Insert into same key : Enqueue TX 4 Enqueue TX 4 2   Mode 4, unique index

31 #.31 Copyright 2006 Kyle Hailey 2.enq: TX - row lock contention 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   Mode 4, foreign key

32 #.32 Copyright 2006 Kyle Hailey 2.enq: TX - row lock contentionParent Child ID IDName ValueID PK Session 1: Insert key into parent no commit no commit 2 ? 2 Foreign Key Session 2: Insert into child same key : Enqueue TX 4 Enqueue TX 4 TX 4 - Foreign Key

33 #.33 Copyright 2006 Kyle Hailey 3.enq: TX - row lock contention  Mode 4  Bitmaps are compressed  Changes to the same bitmap cause locks Value StartRowidEndRowidBitmap

34 #.34 Copyright 2006 Kyle Hailey 3.enq: TX - row lock contention update t1 set n1 = 2 where n2 = 13; update t1 set n1 = 2 where n2 = 13; Session 2 Different rows but same key value create table t1 ( n1number(4), n2number(4)); insert into t1 select 1, rownum select 1, rownum from all_objects from all_objects where rownum <= 400; where rownum <= 400;commit; create bitmap index i1 on t1(n1); create table t1 ( n1number(4), n2number(4)); insert into t1 select 1, rownum select 1, rownum from all_objects from all_objects where rownum <= 400; where rownum <= 400;commit; create bitmap index i1 on t1(n1); update t1 set n1 = 2 where n2 = 12; update t1 set n1 = 2 where n2 = 12; Session 1

35 #.35 Copyright 2006 Kyle Hailey 3.enq: TX - row lock contention  Bitmaps are compressed  Changes to the same bitmap chunk cause locks Value StartRowidEndRowidBitmap block row

36 #.36 Copyright 2006 Kyle Hailey Value StartRowidEndRowidBitmap enq: TX - row lock contention Session 1 Session 2 Update id=800 set value 2 Update id=3 set value 2

37 #.37 Summary: TX 4 from ASH uniq index ST EVENT SID LM P2 P3 OBJ OTYPE FN BLOCKN SQL_ID BSID :39 enq: TX - row lock c bjvx94vnxtxgv 158 FK ( ) ST EVENT SID LM P2 P3 OBJ OTYPE FN BLOCKN SQL_ID BSID :41 enq: TX - row lock c CHILD TABLE ahm7c9rupbz9r 1 bitmap ST EVENT SID LM P2 P3 OBJ OTYPE FN BLOCKN SQL_ID BSID :41 enq: TX - row lock c I1 INDEX 0 0 azav296xxqcjx 144 Copyright 2006 Kyle Hailey

38 #.38 Copyright 2006 Kyle Hailey enq: TX - allocate ITL entry Data Block Header ITL Data Transaction 1 Info Transaction 2 Info

39 #.39 Copyright 2006 Kyle Hailey enq: TX - allocate ITL entry Data Block Header Transaction 1 Data Data Block Header Transaction 2 Row 1 Row 2 Row 3 Transaction 3

40 #.40 Copyright 2006 Kyle Hailey 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 1: update itl set data=data where id=1; session 2: update itl set data=data where id=2; session 3: update itl set data=data where id=3; session 4: update itl set data=data where id=4; session 5: update itl set data=data where id=5; 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 1: update itl set data=data where id=1; session 2: update itl set data=data where id=2; session 3: update itl set data=data where id=3; session 4: update itl set data=data where id=4; session 5: update itl set data=data where id=5;

41 #.41 Copyright 2006 Kyle Hailey enq: TX - contention Example  Session 1 – start transaction, don’t 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  2PC – two phase commit  First does a prepare the commit  Any read or write access in the intervening time waits TX 4

42 #.42 Copyright 2006 Kyle Hailey TX Further Investigation EVENT SQL_ID OBJ FILE# BLOCK# enq: TX - row lock contention ahm7c9rupbz9r FOO enq: TX - row lock contention bjvx94vnxtxgv FOO enq: TX - row lock contention ahm7c9rupbz9r FOO enq: TX - row lock contention bjvx94vnxtxgv FOO enq: TX - row lock contention ahm7c9rupbz9r FOO select event, sql_id, CURRENT_OBJ# || ' ' || name obj CURRENT_OBJ# || ' ' || name obj,CURRENT_FILE# file#,CURRENT_FILE# file#,CURRENT_BLOCK# block#,CURRENT_BLOCK# block# from v$active_session_history ash, from v$active_session_history ash, obj$ o obj$ o where where event like 'enq: TX%' event like 'enq: TX%' and o.obj# (+)= ash.current_obj# and o.obj# (+)= ash.current_obj# order by sample_time order by sample_time

43 #.43 Copyright 2006 Kyle Hailey TX Further Investigation V$active_session_history : BLOCKING_SESSION BLOCKING_SESSION BLOCKING_SESSION_STATUS BLOCKING_SESSION_STATUS BLOCKING_SESSION_SERIAL# BLOCKING_SESSION_SERIAL# Who is the blocker: No Guarentee of finding blocker SQL

44 #.44 Copyright 2006 Kyle Hailey enq: TM - contention  TX locks have a corresponding TM lock  TM locks the structure from change LOCK Parmeter1 Parmeter2(ID1) Parameter3(ID2) enq: TM name|mode object # table/partition LOCK Parmeter1 Parmeter2(ID1) Parameter3(ID2) enq: TM name|mode object # table/partition   Parameter1 = object id

45 #.45 Copyright 2006 Kyle Hailey enq: TM - contention 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);   Exclusive Row Level Lock

46 #.46 Copyright 2006 Kyle Hailey enq: TM - contention Parent Child ID IDName ValueID PK Delete from Parent where ID=2 : Insert into Child ID=1 Enqueue TM 4 Session 2 doesn’t know the value Session 1 inserted Session 2 only knows there is an outstanding change X X Session 1 Session 2 2 2

47 #.47 Copyright 2006 Kyle Hailey enq: TM – contention 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 Foreign Key 1 2 1

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

49 #.49 Copyright 2006 Kyle Hailey UL Locks  User-defined Locks  dbms_lock Wait Event Parameter2Parameter3 enq: UL - contention id 0 dbms_lock.allocate_unique(v_lockname, v_lockhandle); dbms_lock.request(v_lockhandle, p_ltype); dbms_lock.release(v_lockhandle);

50 #.50 Copyright 2006 Kyle Hailey Internal Locks  CI – Cross Instance  CU – Cursor Bind  HW – High Water  RO – Reuse Object  ST – Space Transaction

51 #.51 Copyright 2006 Kyle Hailey enq: CI - contention  Cross Instance  not OPS lock.  invoke actions in background processes  checkpoints  log switches  instance is shut down

52 #.52 Copyright 2006 Kyle Hailey CI – Cross Instance 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 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 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 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

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

54 #.54 Copyright 2006 Kyle Hailey CI Locks SQL_TEXT P2 P alter table XXXXX drop partition YYYYY 1 5 ID1 = 2 " LGWR checkpointing and Hot Backup " ID2 = 5. "Used to queue up interested clients " SQL_TEXT P2 P alter table XXXXX drop partition YYYYY 1 5 ID1 = 2 " LGWR checkpointing and Hot Backup " ID2 = 5. "Used to queue up interested clients " If p2=1 and p3=5, then contention on blocks being checkpointed, try raising fast_start_mttr_target checkpointed, try raising fast_start_mttr_target alter system set fast_start_mttr_target=600 scope=both;

55 #.55 Copyright 2006 Kyle Hailey 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

56 #.56 Copyright 2006 Kyle Hailey enq: HW - contentionData Empty High Water Mark Header Table Wait Event Parameter2Parameter3 enq: HW - contention table space # block Session 1 Session 2 Session 3

57 #.57 Copyright 2006 Kyle Hailey HW  Use Freelists  Cause multiple jumps in High Water Mark  Pre-Allocate Extents  Alter table XXXX allocate extent;  Hidden Parameter  _bump_highwater_mark_count  alter session set "_bump_highwater_mark_count"=100;  Not supported  ASSM  Automatic segment space management  Partition Object

58 #.58 Copyright 2006 Kyle Hailey HW Further Investigation EVENT SQL_ID OBJ FILE# BLOCK# enq: HW - contention 49ch3jfkncnsp T1_I select event, event, sql_id, sql_id, CURRENT_OBJ# || ' ' || name obj CURRENT_OBJ# || ' ' || name obj,CURRENT_FILE# file#,CURRENT_FILE# file#,CURRENT_BLOCK# block#,CURRENT_BLOCK# block# from v$active_session_history ash, from v$active_session_history ash, obj$ o obj$ o where where event like 'enq: HW%' event like 'enq: HW%' and o.obj# (+)= ash.current_obj# and o.obj# (+)= ash.current_obj# order by sample_time ; order by sample_time ;

59 #.59 Copyright 2006 Kyle Hailey enq: KO - fast object checkpoint  Used when checking the cache for blocks from a table for PQO direct read

60 #.60 Copyright 2006 Kyle Hailey enq: RO - fast object reuse  Drop or Truncate a table  Wait for DBWR to clean cache  Solution  Smaller cache  Tune DBWR using smaller MTTR  Use GTT  Truncate/drop less often SELECT TARGET_MTTR, ESTIMATED_MTTR, CKPT_BLOCK_WRITES CKPT_BLOCK_WRITES FROM V$INSTANCE_RECOVERY alter system set fast_start_mttr_target=17 scope=both;

61 #.61 Copyright 2006 Kyle Hailey 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

62 #.62 Copyright 2006 Kyle Hailey Other WAITING_SESSION LOCK_TYPE MODE_REQUESTED MODE_HELD LOCK_ID1 LOCK_ID None 139 Transaction Share Exclusive Transaction Share Exclusive

63 #.63 Copyright 2006 Kyle Hailey Blocking Sessions

64 #.64 Copyright 2006 Kyle Hailey Summary : Internal Locks  CI – Cross Instance  CU – Cursor Bind  HW – High Water  Look at object and SQL  use LMT, freelists, pre-allocate extents  KO – fast object checkpoint  PQO  RO – reusable object  Reduce cache, tune DBWR, use GTT  SQ – Sequence Lock  logon/logoff problem  ST - Space Transaction  only one per database  used for space allocations uet, fet  Find object  use LMT


Download ppt "Enqueue Waits : Locks. #.2 Copyright 2006 Kyle Hailey Locks REDO Lib Cache Buffer Cache IO Locks Network."

Similar presentations


Ads by Google