106
1 © 2006 Julian Dyke Inside RAC Julian Dyke Independent Consultant Web Version juliandyke.co

Inside rac

Embed Size (px)

Citation preview

Page 1: Inside rac

1 © 2006 Julian Dyke

InsideRAC

Julian Dyke

Independent Consultant

Web Version

juliandyke.com

Page 2: Inside rac

© 2006 Julian Dykejuliandyke.com

2

Agenda

Introduction to RAC

Memory Structures

The Buffer Cache

Global Cache Services

The Library Cache

Global Enqueue Services

Page 3: Inside rac

© 2006 Julian Dykejuliandyke.com

3

Introductionto

RAC

Page 4: Inside rac

© 2006 Julian Dykejuliandyke.com

4

What is RAC? Multiple instances running on separate servers (nodes)

Single database on shared storage accessible to all nodes

Instances exchange information over an interconnect network

Node 1

Instance 1

Node 2

Instance 2Interconnect

Shared Storage

LocalDisk

LocalDisk

Page 5: Inside rac

© 2006 Julian Dykejuliandyke.com

5

Architecture

Instance 1

Node 1

Instance 2

Node 2

SharedStorage

Storage Network

Private Network(Interconnect)

Public Network

Page 6: Inside rac

© 2006 Julian Dykejuliandyke.com

6

Some Definitions Resource

Object to which access must be controlled at instance level

Enqueue Memory structure that serializes access to a resource

Global Resources Object to which access must be controlled at cluster level

Global Enqueue Locks and enqueues which need to be consistent between

all instances

Page 7: Inside rac

© 2006 Julian Dykejuliandyke.com

7

Some Definitions... Global Resource Directory (GRD)

Records current state and owner of each resource Contains convert and write queues Distributed across all instances in cluster Maintained by GCS and GES

Global Cache Services (GCS) Implements cache coherency for database Coordinates access to database blocks for instances

Global Enqueue Services (GES) Controls access to other resources (locks) including

library cache and dictionary cache Performs deadlock detection

Page 8: Inside rac

© 2006 Julian Dykejuliandyke.com

8

Instance 2Instance 1

Background Processes

DIAG

LMON

LCK

LMD

LMS

LGWR

SMONPMON

CKPT

ARCH

DIAG

LMON

LCK

LMD

LMS

CKPT

ARCH

LGWR

PMON

DBWR

SMON

DBWR

Redo Logs

DatafilesControlfiles

Redo Logs

SGAUGASGA UGA

Page 9: Inside rac

© 2006 Julian Dykejuliandyke.com

9

Background Processes LMSn

Global Cache Service Process

Manage requests for data access across cluster

Up to 20 in Oracle 10.1 LMS0-LMS9 LMSa-LMSj

Up to 36 in Oracle 10.2 LMS0-LMS9 LMSa-LMSz

In Oracle 10.1 and above, number of GCS server processes can be configured using gcs_server_processes parameter

Default value is 1 (single CPU system)

Page 10: Inside rac

© 2006 Julian Dykejuliandyke.com

10

Background Processes LCK0

Instance Enqueue Process

Manages instance resource requests cross-instance call operations

Assists LMS processes

Formerly known as lock process

In 9.0.1 and below, number of lock processes may be configurable using _gc_lck_procs parameter

Page 11: Inside rac

© 2006 Julian Dykejuliandyke.com

11

Background Processes LMD0

Global Enqueue Service Daemon

Manages requests for global enqueues Updates status of enqueues when granted to / revoked

from an instance

One LMD0 process per instance

In 8.1.7 and below number of lock daemons may be configurable using _lm_dlmd_processes parameter

Page 12: Inside rac

© 2006 Julian Dykejuliandyke.com

12

Background Processes LMON

Global Enqueue Service Monitor

One LMON process per instance

Monitors cluster to maintain global enqueues and resources

Manages instance and process expirations recovery processing for cluster enqueues

Page 13: Inside rac

© 2006 Julian Dykejuliandyke.com

13

Background Processes DIAG - Diagnosibility Process

Collects diagnostic data in the event of a failure

Creates subdirectories in BACKGROUND_DUMP_DEST directory

In Oracle 9.0.1 and above can be disabled using _diag_daemon parameter

Do not try this on a production system

Page 14: Inside rac

© 2006 Julian Dykejuliandyke.com

14

Fixed Tables Memory structures externalized in X$ tables Instance specific Underlying structures for dynamic performance views Can contain

Structures accessed directly from executable X$KSLLD => V$LATCHNAME X$KSUSD => V$STATNAME

Structures accessed directly from SGA X$KSUSE => V$SESSION X$KSUPR => V$PROCESS

Executable and/or SGA structures joined in PGA X$KQLFXPL => V$SQL_PLAN X$KGLOB => V$SQL, V$SQL_AREA

Page 15: Inside rac

© 2006 Julian Dykejuliandyke.com

15

Dynamic Performance Views In a RAC environment each V$ view has an equivalent GV$

view GV$ view includes INST_ID column. For example V$SGA

NAME VARCHAR2(20)

VALUE NUMBER

GV$SGA

INST_ID NUMBER

NAME VARCHAR2(20)

VALUE NUMBER

In Oracle 9.2 and below PARALLEL_MIN_SERVERS must be >= number of hosts to use GV$ views

In Oracle 10.1 and above PZnn background processes are used to return data on remote hosts e.g. PZ99

Page 16: Inside rac

© 2006 Julian Dykejuliandyke.com

16

CATCLUST.SQL Some additional views/synonyms are created for RAC

databases using $ORACLE_HOME/rdbms/admin/catclust.sql

Synonym Name View Name

V$GES_CONVERT_LOCAL V$DLM_CONVERT_LOCAL

V$GES_CONVERT_REMOTE V$DLM_CONVERT_REMOTE

V$GES_LATCH V$DLM_LATCH

V$GES_RESOURCE V$DLM_RESS

V$GES_STATISTICS V$DLM_MISC

V$GES_TRAFFIC_CONTROLLER V$DLM_TRAFFIC_CONTROLLER

GV$GES_CONVERT_LOCAL GV$DLM_CONVERT_LOCAL

GV$GES_CONVERT_REMOTE GV$DLM_CONVERT_REMOTE

GV$GES_LATCH GV$DLM_LATCH

GV$GES_RESOURCE GV$DLM_RESS

GV$GES_STATISTICS GV$DLM_MISC

GV$GES_TRAFFIC_CONTROLLER GV$DLM_TRAFFIC_CONTROLLER

Page 17: Inside rac

© 2006 Julian Dykejuliandyke.com

17

ORADEBUG ORADEBUG includes LKDEBUG

Must be run by user with SYSDBA privilege

SQL> ORADEBUG LKDEBUG HELP

Usage:lkdebug [options] -l [r|p] <enqueue pointer> Enqueue Object -r <resource pointer> Resource Object -b <gcs shadow pointer> GCS shadow Object -p <process id> client pid -P <process pointer> Process Object -O <i1> <i2> <types> Oracle Format resname -a <res/lock/proc> all <res/lock/proc> pointer -A <res/lock/proc> all <res/lock/proc> contexts -a <res> [<type>] all <res> pointers by an optional type -a convlock all converting enqueue (pointers) -A convlock all converting enqueue contexts -a convres all res ptr with converting enqueues -A convres all res contexts with converting enqueues

Page 18: Inside rac

© 2006 Julian Dykejuliandyke.com

18

ORADEBUG Continued...

-a name list all resource names -a hashcount list all resource hash bucket counts -t Traffic controller info -s summary of all enqueue types -k GES SGA summary info -m pkey <objectno> request for remastering this object at current instance -m dpkey <objectno> request for dissolving remastering of this object at current instance

Page 19: Inside rac

© 2006 Julian Dykejuliandyke.com

19

MemoryStructures

Page 20: Inside rac

© 2006 Julian Dykejuliandyke.com

20

Memory Areas An Oracle process includes

the following memory areas

Executable SGA Shared Libraries PGA/Session Heap Stack

40000000

20000000

Executable

PGASession Heap

SharedLibraries

SGA

Stack

STOP

FFFFFFFF

00000000

Page 21: Inside rac

© 2006 Julian Dykejuliandyke.com

21

Shared Memory Shared memory areas can be dumped to trace file using

ORADEBUG SETMYPIDORADEBUG IPC

$ sqlplus /nolog

SQL> CONNECT SYS/<password> AS SYSDBAConnected

SQL> ORADEBUG SETMYPIDStatement processed

SQL> ORADEBUG IPCInformation written to trace file

Page 22: Inside rac

© 2006 Julian Dykejuliandyke.com

22

Area #0 `Fixed Size' containing Subareas 0-0 Total size 0000000000129968 Minimum Subarea size 00000000 Area Subarea Shmid Stable Addr Actual Addr 0 0 65537 0x00000020000000 0x00000020000000 Subarea size Segment size 000000000012a000 0000000010800000 Area #1 `Variable Size' containing Subareas 2-2 Total size 0000000010000000 Minimum Subarea size 00400000 Area Subarea Shmid Stable Addr Actual Addr 1 2 65537 0x00000020400000 0x00000020400000 Subarea size Segment size 0000000010000000 0000000010800000 Area #2 `Redo Buffers' containing Subareas 1-1 Total size 00000000002d6000 Minimum Subarea size 00000000 Area Subarea Shmid Stable Addr Actual Add 2 1 65537 0x0000002012a000 0x0000002012a000 Subarea size Segment size 00000000002d6000 0000000010800000 Area #3 `skgm overhead' containing Subareas 3-3 Total size 0000000000001000 Minimum Subarea size 00000000 Area Subarea Shmid Stable Addr Actual Addr 3 3 65537 0x00000030400000 0x00000030400000 Subarea size Segment size 0000000000001000 0000000010800000

ORADEBUG IPC - Example

STOP

Area #0 `Fixed Size' containing Subareas 0-0 Total size 0000000000129968 Minimum Subarea size 00000000 Area Subarea Shmid Stable Addr Actual Addr 0 0 65537 0x00000020000000 0x00000020000000 Subarea size Segment size 000000000012a000 0000000010800000 Area #1 `Variable Size' containing Subareas 2-2 Total size 0000000010000000 Minimum Subarea size 00400000 Area Subarea Shmid Stable Addr Actual Addr 1 2 65537 0x00000020400000 0x00000020400000 Subarea size Segment size 0000000010000000 0000000010800000 Area #2 `Redo Buffers' containing Subareas 1-1 Total size 00000000002d6000 Minimum Subarea size 00000000 Area Subarea Shmid Stable Addr Actual Add 2 1 65537 0x0000002012a000 0x0000002012a000 Subarea size Segment size 00000000002d6000 0000000010800000 Area #3 `skgm overhead' containing Subareas 3-3 Total size 0000000000001000 Minimum Subarea size 00000000 Area Subarea Shmid Stable Addr Actual Addr 3 3 65537 0x00000030400000 0x00000030400000 Subarea size Segment size 0000000000001000 0000000010800000

Fixed Area

Variable Area

Redo Buffers

OS Specific

Page 23: Inside rac

© 2006 Julian Dykejuliandyke.com

23

Shared Global Area Contains

Fixed SGA Buffer Pool Shared Pool Oracle 7.0 and above Large Pool Oracle 8.0 and above Java Pool Oracle 8.1.5 and above Streams Pool Oracle 10.1 and above Redo buffers

Buffer Pool includes Default cache Keep and Recycle cache Oracle 8.0 and above 2K, 4K, 8K, 16K and 32K cache Oracle 9.0.1 and above

Page 24: Inside rac

© 2006 Julian Dykejuliandyke.com

24

V$SGAINFO Summarizes SGA pools

NAME VARCHAR2(32)

BYTES NUMBER

RESIZEABLE VARCHAR2(3)

SELECT * FROM v$sgainfo;

NAME BYTES RESIZEABLE-------------------------------- ---------- ----------Fixed SGA Size 1218920 NoRedo Buffers 2973696 NoBuffer Cache Size 176160768 YesShared Pool Size 83886080 YesLarge Pool Size 4194304 YesJava Pool Size 4194304 YesStreams Pool Size 0 YesGranule Size 4194304 NoMaximum SGA Size 272629760 NoStartup overhead in Shared Pool 46137344 NoFree SGA Memory Available 0

Page 25: Inside rac

© 2006 Julian Dykejuliandyke.com

25

Granules Introduced in Oracle 9.0.1

SGA divided into granules

In Oracle 9.2 Unix granule size dependent on SGA_MAX_SIZE 4 mb SGA_MAX_SIZE <= 128 mb 16 mb SGA_MAX_SIZE > 128 mb

If SGA_MAX_SIZE not set explicitly then defaults to sum of individual pool parameters

SGA_MAX_SIZE cannot be dynamically modified

Page 26: Inside rac

© 2006 Julian Dykejuliandyke.com

26

Granules In Oracle 10.1 and above

SGA_MAX_SIZE dependent on SGA_TARGET

Granule size dependent on SGA_MAX_SIZE 4 mb SGA_MAX_SIZE <= 256 mb?? 16 mb SGA_MAX_SIZE > 256 mb ??

Granule size can be controlled using _ksmg_granule_size unsupported parameter

Page 27: Inside rac

© 2006 Julian Dykejuliandyke.com

27

X$KSMGEIntroduced in Oracle 9.2Describes individual granules

ADDR RAW(4)

INDX NUMBER

INST_ID NUMBER

GRANNUM NUMBER

GRANTYPE NUMBER

GRANSTATE VARCHAR2(16)

GRANFLAGS NUMBER

LOCALITY NUMBER

KSMAREANUM NUMBER

BASEADDR RAW(4)

GRANSIZE NUMBER

GRANNEXT NUMBER

GRANPREV NUMBER

INVALID (Free)ALLOCATED

Granule Address

Granule Size

Next granule ID

Previous granule ID

Granule ID

0 Free1 Shared Pool2 Large Pool3 Java Pool6 Buffer Pool

Page 28: Inside rac

© 2006 Julian Dykejuliandyke.com

28

Granules

SGA_TARGET = 260M

SGA_MAX_SIZE = 260M

GRANULE SIZE = 4M

256M

4M

Buffer Pool 172M

Fixed SGA + Redo Buffers 4M

Large Pool 4M

Shared Pool 76M

Java Pool 4M

STOP

This is an example of an

SGA mapped using

X$KSMGE

Page 29: Inside rac

© 2006 Julian Dykejuliandyke.com

29

V$SGASTAT Enhanced in Oracle 10.1 and above

Shared Pool 682

Large Pool 6

Java Pool 4

Streams Pool 4

In Oracle 10.2 describes around 700 memory areas

POOL VARCHAR2(12)

NAME VARCHAR2(26)

BYTES NUMBER

Page 30: Inside rac

© 2006 Julian Dykejuliandyke.com

30

V$SGASTAT RAC-specific areas include

gcs affinity

gcs close obj

gcs commit sga state

gcs I/O statistics struct

gcs mastership buckets

gcs opaque in

gcs res hash bucket

gcs res latch table

gcs resource freelist arr

gcs resource freelist dyn

gcs resources

gcs scan queue array

gcs shadow locks dyn seg

gcs shadow locks freelist

gcs shadows

ges big msg buffers

ges deadlock xid freelist

ges deadlock xid hash tab

ges enqueue cur. usage pe

ges enqueue max. usage pe

ges enqueue multiple free

ges enqueues

ges ipc instance maps

ges lmd process descripto

ges lms process descripto

ges process array

ges process hash table

ges recovery domain table

ges regular msg buffers

ges reserved msg buffers

ges res mastership bucket

ges resource

ges resource hash seq tab

ges resource hash table

ges resource pools

ges scan queue array

ges shared global area

KCL buffer header

KCL instance cache transf

KCL lock contexts

KCL lock state

KCL name table

KCL partition table

KCL region array

KJXM msg statistics table

Page 31: Inside rac

© 2006 Julian Dykejuliandyke.com

31

V$SGASTAT Significant RAC areas in Oracle 10.2

Name Size(bytes) Location

gcs resources 2298008 Segmented Array

gcs shadows 1632280 Segmented Array

ges resource 1257188 Heap

ges enqueues 1625344 Segmented Array

ges big msg buffers 3979396 Unknown

In Oracle 9.2 all five structures were stored in segmented arrays

Page 32: Inside rac

© 2006 Julian Dykejuliandyke.com

32

Permanent Areas

SELECT ksmchptr, ksmchsizFROM x$ksmspWHERE ksmchcls = 'perm';

Address Size

2D034000 3981312

2D434000 3549424

2D834000 3963236

2DC34000 3980584

2DFFFD28 728

2E034000 3919532

Allocated at instance startup Contain structures such as

processes sessions segmented arrays

STOP

2AC00000

2B800000

2BC00000

2C000000

2C400000

2C800000

2CC00000

2D000000

2D800000

2DC00000

2E000000

2E400000

2E800000

2EF00000

2F000000

2F400000

2F800000

2FC00000

30000000

2D400000

PermanentArea

Heap

Page 33: Inside rac

© 2006 Julian Dykejuliandyke.com

33

X$KSMSP Externalises chunks in the shared pool

ADDR RAW(4)

INDX NUMBER

INST_ID NUMBER

KSMCHIDX NUMBER

KSMCHDUR NUMBER

KSMCHCOM VARCHAR2(16)

KSMCHPTR RAW(4)

KSMCHSIZ NUMBER

KSMCHCLS VARCHAR2(8)

KSMCHTYP NUMBER

KSMCHPAR RAW(4)

Description of chunk type

Address of chunk

Size including header

Class●Perm●Recreate●Freeable●Free●R-Free●R-Freeable

Address of parent

Type (recreate only)●0x18 - KGL Handle●0x24 - Fixed Allocation●0x74 - KQR PO●0x80 - KQR SO●0xFFF - Extended header

Page 34: Inside rac

© 2006 Julian Dykejuliandyke.com

34

X$KSMSP Some RAC components are stored in the shared pool heap

SELECT ksmchcom, SUM(ksmchsiz), COUNT(*)FROM x$ksmspGROUP BY ksmchcom;

gcs_mastership 4620 1

gcs_res_hash_bu 16396 1

gcs_res_latch_t 7692 1

ges_res_masters 3084 1

ges_resource 619276 164

Page 35: Inside rac

© 2006 Julian Dykejuliandyke.com

35

Segmented Arrays Used to store arrays of objects

Array too large to fit in granule Array may grow dynamically

Objects using segmented arrays include enqueues (locks) enqueue resources (resources) transactions transaction branches

Segmented arrays managed recursively by segmented array

Segmented arrays externalised in X$KSMDD

Page 36: Inside rac

© 2006 Julian Dykejuliandyke.com

36

Segmented Arrays

SegmentedArrays

Call

Enqueues

EnqueueResources

SegmentedArray

HeaderSegmented

Array

SegmentedArray

Header

SegmentedArray

STOP

Page 37: Inside rac

© 2006 Julian Dykejuliandyke.com

37

X$KSMDD Externalises segmented array headers

ADDR RAW(4)

INDX NUMBER

INST_ID NUMBER

NAME VARCHAR2(30)

ELEMENTS_CHUNK NUMBER

ITEMS_PT NUMBER

INITENTRIES NUMBER

NUMENTRIES NUMBER

CURENTRIES NUMBER

NUMCHUNKS NUMBER

ELEMSIZE NUMBER

FLAGS NUMBER

HEAP RAW(4)

SECONDARY RAW(4)

Name of array

Address of parent heap

Number of chunks

Page 38: Inside rac

© 2006 Julian Dykejuliandyke.com

38

Segmented Arrays In Oracle 10.2 there are three RAC-specific segmented arrays:

GCS Resources GCS Shadows GES Enqueues

In previous releases there were five segmented arrays: GCS Resources GCS Shadows GES Resources GES Shadows GES Messages

Page 39: Inside rac

© 2006 Julian Dykejuliandyke.com

39

Heaps A heap consists of one or more extents Each heap extent occupies a single granule Each extent contains one or more chunks Each heap has a header containing

list of used chunks list of free chunks

Extent 0 Extent 1 Extent 2HeapHeader

Free List Chunks

STOP

Page 40: Inside rac

© 2006 Julian Dykejuliandyke.com

40

X$KSMHP Externalises chunks in the heap

ADDR RAW(4)

INDX NUMBER

INST_ID NUMBER

KSMCHDS RAW(4)

KSMCHCOM VARCHAR2(16)

KSMCHPTR RAW(4)

KSMCHSIZ NUMBER

KSMCHCLS VARCHAR2(8)

KSMCHTYP NUMBER

KSMCHPAR RAW(4)

KSMCHOWN RAW(4)

Can only be accessed using KSMCHDS e.g.

SELECT * FROM x$ksmhp

WHERE ksmchds = HEXTORAW ('2CA54040');

Page 41: Inside rac

© 2006 Julian Dykejuliandyke.com

41

The BufferCache

Page 42: Inside rac

© 2006 Julian Dykejuliandyke.com

42

Buffer Headers Each buffer has a buffer header Buffer headers are stored in same granule as buffers Buffer headers include

Replacement list Hash list Pointer to buffer In RAC only pointer to Lock Element

Buffer Headers

Granule

Buffers

STOP

Page 43: Inside rac

© 2006 Julian Dykejuliandyke.com

43

X$BHADDR RAW(4)

INDX NUMBER

INST_ID NUMBER

HLADDR RAW(4)

BLSIZ NUMBER

NXT_HASH RAW(4)

PRV_HASH RAW(4)

NXT_REPL RAW(4)

PRV_REPL RAW(4)

FLAG NUMBER

RFLAG NUMBER

SFLAG NUMBER

LRU_FLAG NUMBER

TS# NUMBER

FILE# NUMBER

DBARFIL NUMBER

DBABLK NUMBER

CLASS NUMBER

STATE NUMBER

MODE_HELD NUMBER

CHANGES NUMBER

CSTATE NUMBER

LE_ADDR RAW(4)

DIRTY_QUEUE NUMBER

SET_DS RAW(4)

OBJ NUMBER

BA RAW(4)

CR_SCN_BAS NUMBER

CR_SCN_WRP NUMBER

CR_XID_USN NUMBER

CR_XID_SLT NUMBER

CR_XID_SQN NUMBER

CR_UBA_FIL NUMBER

CR_UBA_BLK NUMBER

CR_UBA_SEQ NUMBER

CR_UBA_REC NUMBER

CR_SFL NUMBER

CR_CLS_BAS NUMBER

CR_CLS_WRP NUMBER

LRBA_SEQ NUMBER

LRBA_BNO NUMBER

HSCN_BAS NUMBER

HSCN_WRP NUMBER

HSUB_SCN NUMBER

US_NXT RAW(4)

US_PRV RAW(4)

WA_NXT RAW(4)

WA_PRV RAW(4)

TCH NUMBER

TIM NUMBER

Page 44: Inside rac

© 2006 Julian Dykejuliandyke.com

44

Head of Cold End

Head of Hot End

Single-Block Reads

92

0

34

3

72

4

52

1

71

2

66

0

49

0

42

1

45

2

52

1

71

2

66

0

42

1

11

1

52

1

71

2

11

1

42

1

42

2

71

0

92

0

34

3

72

4

45

2

11

1

52

1

42

2

33

1

45

2

11

1

42

2

33

1

34

4

92

0

34

4

72

4

45

2

11

1

42

0

33

1

71

0

87

1

87

1

72

4

33

1

45

2

Read Block 42

Get first available buffer from cold endUpdate buffer contentsInsert buffer at head of cold end

Read Block 11

Get first available buffer from cold endUpdate buffer contentsInsert buffer at head of cold end

Read Block 42

Update touch count for block 42

Read Block 33

Move block 71 to head of hot endSet touch count on block 71 to zeroGet first available bufferfrom cold endUpdate buffer contentsInsert buffer at head of coldend

Read Block 34

Update touch countfor block 34

Read Block 87

Move block 42 to headof hot endSet touch counton block 42 to zeroGet first available bufferfrom cold endUpdate buffer contentsInsert buffer at head of coldend

STOP

Block Number

Touch Count

Page 45: Inside rac

© 2006 Julian Dykejuliandyke.com

45

Multi-Block Reads

Head of Cold End

Head of Hot End

Read Block 1

Get first four available buffers from cold endRead next four blocks into buffers

1 2 3 4

Insert buffers at head of cold end

12 13 2 14 3 2 1

Move block 1 to cold end

121

Read Block 2

Move block 2 to cold end

21 321 3 4

Read Block 3

Move block 3 to cold end

Read Block 4

Move block 4 to cold end

Read Block 5

Get next four available buffers from cold endRead next four blocks into buffersInsert buffers at head of cold endMove block 5 to cold end

4 3 2 15

5 56

76

7 6 5

8

78 5 56 5 65 6 75 6 7 8

Read Block 6

Move block 6 to cold end

Read Block 7

Move block 7 to cold end

Read Block 8

Move block 8 to cold end

STOP

DB_FILE_MULTIBLOCK_READ_COUNT = 4

Page 46: Inside rac

© 2006 Julian Dykejuliandyke.com

46

GlobalCache

Services

Page 47: Inside rac

© 2006 Julian Dykejuliandyke.com

47

Read with No Transfer

Instance 1

Instance 2

Instance 4

1318

Request shared resource

Instance 3

ResourceMaster

Instance 2 requests current read on block

Request granted

SN

Read request

Block returned

1318

1

2

3

4

STOP

Page 48: Inside rac

© 2006 Julian Dykejuliandyke.com

48

Read to Write Transfer

Instance 1

Instance 2

Instance 4

1318

Request exclusiveresource

Instance 3

ResourceMaster

Instance 1 requests exclusive read on block

Transfer block to Instance 1 for

exclusiveaccess

SNBlock and resource status

Resource status

1318

1

2

3

4

N

N

X

1320

STOP

Page 49: Inside rac

© 2006 Julian Dykejuliandyke.com

49

Write to Write Transfer

Instance 1

Instance 2

Instance 4

1318

Request block in exclusive mode

Instance 3

ResourceMaster

Instance 4 requests exclusive read on block

Transfer block to Instance 4 in exclusive

mode

SN

Block and resource status

Resource status

1318

12

3

4

N NX

1320

N

N

X

1320 1323

STOP

Note that Instance 1 will create a past image (PI) of the dirty block

Page 50: Inside rac

© 2006 Julian Dykejuliandyke.com

50

Past Images When an instance passes a dirty block to another instance it

Flushes redo buffer to redo log

Retains past image (PI) of block in buffer cache PI is retained until another instance writes block to disk Used to reduce recovery times

Recorded in V$BH.STATUS as PI Based on X$BH.STATE (value 8 in Oracle 10.2)

Page 51: Inside rac

© 2006 Julian Dykejuliandyke.com

51

Past Images

13281329UPDATE t1SET c1 = 1324;COMMIT;

UPDATE t1SET c1 = 1329;COMMIT;

1323

Instance 1

13231324132513261327

Buffer Cache

13241323

13251324

13261325

13271326

1328

13281327

Redo Log 1

Instance 2

Buffer Cache

13291328

UPDATE t1SET c1 = 1325;COMMIT;

UPDATE t1SET c1 = 1326;COMMIT;

UPDATE t1SET c1 = 1327;COMMIT;

UPDATE t1SET c1 = 1328;COMMIT; 1328

1323

Redo Log 2

1323

132813291329

1329

1329

Assume table t1 contains a single row in block 42

Instance 1 updates column to 1324

Block 42 is read from diskUndo/Redo written to

Redo Log 1Block 42 is updated in buffer

cacheInstance 1 updates column to

1325Undo/Redo written to

Redo Log 1Block 42 is updated in buffer

cacheInstance 1 updates column to

1326Undo/Redo written to

Redo Log 1Block 42 is updated in buffer

cacheInstance 1 updates column to

1327Undo/Redo written to

Redo Log 1Block 42 is updated in buffer

cacheInstance 1 updates column to

1328Undo/Redo written to

Redo Log 1Block 42 is updated in buffer

cacheInstance 2 updates column to

1329GCS transfers block from Instance 1 to Instance 2

Instance 1 makes block 42 a Past Image blockUndo/redo written to

Redo Log 2Block 42 is updated in buffer

cacheInstance 2 Crashes

Contents of buffer cache are lostDBWR has not written changes

to block 42 back to disk yetInstance 1 must perform recovery for Instance 2

Block 42 needs recoveryInstance 1 uses Past Image Undo/redo is applied from

Redo Log 2Block 42 is subsequently written

back to disk by DBWR

STOP

Page 52: Inside rac

© 2006 Julian Dykejuliandyke.com

52

Write to Read Transfer

Instance 1

Instance 2

Instance 4

1318

Request block in shared mode

Instance 3

ResourceMaster

Instance 2 requests current read on block

SN

Block and resource status

Resource status

1318

1

3

4

N NX

1320

N

N

X

1320 1323

Transferblock to Instance 1in sharedmode

2

S

S

STOP

Note that in recent versions _fairness_threshold is used to avoid unnecessary lock conversions

Page 53: Inside rac

© 2006 Julian Dykejuliandyke.com

53

Fairness Threshold Intended to prevent unnecessary lock downgrades when

other instances only require read-only copies

For write to read transfers Writing instance retains X lock Reading instance retains null lock

If _fairness_threshold reached then Writing instance downgrades X lock to S lock Reading instance receives S lock

_fairness_threshold default value is 4

Page 54: Inside rac

© 2006 Julian Dykejuliandyke.com

54

Fairness Threshold

Assume instance 1 holds exclusive lock on block

Instance 2

Instance 2 requests consistent read

Instance 1 sets counter to 1Instance 1 sends block to

Instance 2

13231323

Instance 1

X

Instance 2 receives block with Null lock

13231323

01234 N

Instance 2 requests consistent read

Instance 1 sets counter to 2Instance 1 sends block to

Instance 2Instance 2 receives block with

Null lock

1323

Instance 2 requests consistent read

Instance 1 sets counter to 3Instance 1 sends block to

instance 2Instance 2 receives block with

Null lockInstance 2 requests consistent

readInstance 1 sets counter to 4

Instance 1 downgrades lock from X to S

S

Instance 1 sends block to Instance 2

Instance 2 receives block with Shared lock

S

_fairness_threshold = 4

STOP

Page 55: Inside rac

© 2006 Julian Dykejuliandyke.com

55

Lock Elements Contain embedded GCS Client structures (KJBL)

LockElement

GCSClient

BufferHeader

LockElement

GCSClient

BufferHeader

BufferHeader

LockElement

GCSClient

Page 56: Inside rac

© 2006 Julian Dykejuliandyke.com

56

V$LOCK_ELEMENT Based on X$LE

LOCK_ELEMENT_ADDR RAW(4)

INDX NUMBER

CLASS NUMBER

LOCK_ELEMENT_NAME NUMBER

MODE_HELD NUMBER

BLOCK_COUNT NUMBER

RELEASING NUMBER

ACQUIRING NUMBER

INVALID NUMBER

FLAGS NUMBER

Page 57: Inside rac

© 2006 Julian Dykejuliandyke.com

57

X$LEADDR RAW(4)

INDX NUMBER

INST_ID NUMBER

LE_ADDR RAW(4)

NAME NUMBER

LE_CLASS NUMBER

LE_RLS NUMBER

LE_ACQ NUMBER

LE_FLAGS NUMBER

LE_MODE NUMBER

LE_WRITE NUMBER

LE_LOCAL NUMBER

LE_RECOVERY NUMBER

LE_BLKS NUMBER

LE_TIME NUMBER

LE_KJBL RAW(4)

BufferHeader

LockElement

GCSClient

STOP

Page 58: Inside rac

© 2006 Julian Dykejuliandyke.com

58

Global Cache Services

KJBRKJBR

KJBL

BH BH

LE

KJBL

LE

KJBL

GCSClient

GCSShadow

Page 59: Inside rac

© 2006 Julian Dykejuliandyke.com

59

GCS Parameters GCS Resources

Number of GCS resource structures determined by _gcs_resources parameter

Stored in segmented array Externalized in X$KJBR Number of free GCS resource structures in X$KJBRFX

GCS Enqueues (Shadows/Clients) Number of GCS enqueue structures determined by

_gcs_shadow_locks parameter Stored in segmented array Externalized in X$KJBL Number of free GCS enqueue structures in X$KJBLFX

Page 60: Inside rac

© 2006 Julian Dykejuliandyke.com

60

X$KJBR Externalizes GCS Resources

ADDR RAW(4)

INDX NUMBER

INST_ID NUMBER

KJBRRESP RAW(4)

KJBRGRANT VARCHAR2(9)

KJBRNCVL VARCHAR2(9)

KJBRROLE NUMBER

KJBRNAME VARCHAR2(30)

KJBRMASTER NUMBER

KJBRGRANTQ RAW(4)

KJBRCVTQ RAW(4)

KJBRWRITER RAW(4)

Page 61: Inside rac

© 2006 Julian Dykejuliandyke.com

61

X$KJBL Externalizes GCS Enqueues

ADDR RAW(4)

INDX NUMBER

INST_ID NUMBER

KJBLLOCKP RAW(4)

KJBLGRANT VARCHAR2(9)

KJBLREQUEST VARCHAR2(9)

KJBLROLE NUMBER

KJBLRESP RAW(4)

KJBLNAME VARCHAR2(30)

KJBLNAME2 VARCHAR2(30)

KJBLQUEUE NUMBER

KJBLLOCKST VARCHAR2(64)

KJBLWRITING NUMBER

KJBLREQWRITE NUMBER

KJBLMASTER NUMBER

KJBLBLOCKED NUMBER

KJBLBLOCKER NUMBER

Page 62: Inside rac

© 2006 Julian Dykejuliandyke.com

62

Global Cache Dumps To dump the contents of the global cache use:

ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME GC_ELEMENTS LEVEL 1';

GLOBAL CACHE ELEMENT DUMP (address: 0x21fecd18): id1: 0x3591 id2: 0x10000 obj: 181 block: (1/13713) lock: SL rls: 0x0000 acq: 0x0000 latch: 0 flags: 0x41 fair: 0 recovery: 0 fpin: 'kdswh05: kdsgrp' bscn: 0x0.18a9c bctx: (nil) write: 0 scan: 0x0 xflg: 0 xid: 0x0.0.0

GCS CLIENT 0x21fecd60,1 sq[(nil),(nil)] resp[(nil),0x3591.10000] pkey 181grant 1 cvt 0 mdrole 0x21 st 0x20 GRANTQ rl LOCALmaster 1 owner 0 sid 0 remote[(nil),0] hist 0x7chistory 0x3c.0x1.0x0.0x0.0x0.0x0. cflag 0x0 sender 2 flags 0x0 replay# 0disk: 0x0000.00000000 write request: 0x0000.00000000pi scn: 0x0000.00000000msgseq 0x1 updseq 0x0 reqids[1,0,0] infop 0x0pkey 181hv 107 [stat 0x0, 1->1, wm 32767, RMno 0, reminc 6, dom 0]kjga st 0x4, step 0.0.0, cinc 8, rmno 10, flags 0x0lb 0, hb 0, myb 178, drmb 178, apifrz 0

Page 63: Inside rac

© 2006 Julian Dykejuliandyke.com

63

Global Cache Dumps Continued

GLOBAL CACHE ELEMENT DUMP (address: 0x237f4358): id1: 0x6a39 id2: 0x10000 obj: 74 block: (1/27193) lock: SL rls: 0x0000 acq: 0x0000 latch: 0 flags: 0x41 fair: 0 recovery: 0 fpin: 'kdswh05: kdsgrp' bscn: 0x0.26992 bctx: (nil) write: 0 scan: 0x0 xflg: 0 xid: 0x0.0.0

GCS SHADOW 0x237f43a0,1 sq[0x2ee64e8c,0x2eff3858] resp[0x2ee64e74,0x6a39.10000] pkey 74 grant 1 cvt 0 mdrole 0x21 st 0x40 GRANTQ rl LOCAL master 0 owner 0 sid 0 remote[(nil),0] hist 0x12a5 .....

GCS RESOURCE 0x2ee64e74 hashq [0x2ee61894,0x2ff57390] name[0x6a39.10000] pkey 74 grant 0x2eff3858 cvt (nil) send (nil),0 write (nil),0@65535

flag 0x0 mdrole 0x1 mode 1 scan 0 role LOCAL ..... GCS SHADOW 0x2eff3858,1 sq[0x237f43a0,0x2ee64e8c] resp[0x2ee64e74,0x6a39.10000] pkey 74 grant 1 cvt 0 mdrole 0x21 st 0x40 GRANTQ rl LOCAL

master 0 owner 1 sid 0 remote[0x23fea160,1] hist 0x65f .....

GCS SHADOW 0x237f43a0,1 sq[0x2ee64e8c,0x2eff3858] resp[0x2ee64e74,0x6a39.10000] pkey 74 grant 1 cvt 0 mdrole 0x21 st 0x40 GRANTQ rl LOCAL master 0 owner 0 sid 0 remote[(nil),0] hist 0x12a5 .....

Page 64: Inside rac

© 2006 Julian Dykejuliandyke.com

64

Block Mastering Each block is mastered on one instance

Block DBA is reported by X$KJBR.KJBRNAME

Names for have the format: [<block_number>][<file_number>],[BL]

Ordering by X$KJBR.KJBRNAME is difficult because the resource names do not collate e.g.

[0x900][0x70000],[BL] [0x90][0x70000],[BL]

Current master reported by X$KJBR.KJBRMASTER

Page 65: Inside rac

© 2006 Julian Dykejuliandyke.com

65

Block Mastering In Oracle 10.2 block mastering is determined by

_lm_contiguous_res_count Specifies number of contiguous blocks that will hash to the

same HV bucket Defaults to 128 For example

Start End

0x080 0x0FF

0x180 0x1FF

0x280 0x2FF

0x380 0x3FF

0x480 0x4FF

0x580 0x5FF

etc etc

Start End

0x000 0x07F

0x100 0x17F

0x200 0x27F

0x300 0x37F

0x400 0x47F

0x500 0x57F

etc etc

Instance 0 Instance 1

Page 66: Inside rac

© 2006 Julian Dykejuliandyke.com

66

Block Mastering In Oracle 9.2 (and probably 10.1) block mastering determined

by hash function Algorithm applied to groups of 1289 contiguous blocks

In two node cluster instance 0 has 645 blocks instance 1 has 644 blocks

In three node cluster instance 0 has 430 blocks instance 2 has 215 blocks instance 1 has 430 blocks instance 2 has 214 blocks

Beware of small hot tables and indexes....

Page 67: Inside rac

© 2006 Julian Dykejuliandyke.com

67

Dynamic Remastering In Oracle 9.2

documentation describes dynamic remastering not implemented in code

In Oracle 10.1 work at data file level very high threshold so difficult to test does occur on some customer sites may cause LMON process to crash in 10.1.0.4

bug 3659289 - patch available fixed in 10.1.0.5/10.2.0.1

In Oracle 10.2 works at object level thresholds are relatively low

Page 68: Inside rac

© 2006 Julian Dykejuliandyke.com

68

Dynamic Remastering Example

SELECT data_object_id FROM dba_objectsWHERE owner = 'US01'AND object_name = 'T1';

OBJECT_ID---------52084

ORADEBUG LKDEBUG -m pkey 52084

To remaster object at current instance use:

All blocks now mastered by the current instance

To redistribute masters to all available instances use:

ORADEBUG LKDEBUG -m dpkey 52084

Blocks mastered by both (all) instances again

Page 69: Inside rac

© 2006 Julian Dykejuliandyke.com

69

V$GCSPFMASTER_INFO Object re mastering is recorded in V$GCSPFMASTER_INFO

FILE_ID NUMBER

OBJECT_ID NUMBER

CURRENT_MASTER NUMBER

PREVIOUS_MASTER NUMBER

REMASTER_CNT NUMBER

Page 70: Inside rac

© 2006 Julian Dykejuliandyke.com

70

Dynamic Remastering Object remastering recorded in V$GCSPFMASTER_INFO Instances are internally numbered 0, 1 etc Initially contains no rows After remastering object 52084 to instance 0

SELECT object_id, current_master, previous_master FROM v$gcspfmaster_info;

After remastering object 52084 to instance 1

Object ID Current Master Previous Master

52084 0 32767

Object ID Current Master Previous Master

52084 1 0

Page 71: Inside rac

© 2006 Julian Dykejuliandyke.com

71

Dynamic Remastering Information about Dynamic Remastering operations is also

recorded in the following fixed views

X$KJDRMREQ Dynamic Remastering Requests

X$KJDRMAFNSTATS File Remastering Statistics

X$KJDRMHVSTATS Hash Value Statistics

Page 72: Inside rac

© 2006 Julian Dykejuliandyke.com

72

The LibraryCache

Page 73: Inside rac

© 2006 Julian Dykejuliandyke.com

73

Library Cache Object - Parent

16 x 1 wordpointers

KGLHD

ParentObject

KGLNA

SELECT SUM (c2) FROM t1WHERE c3 = 42 AND c4 < 2004

ParentName

ChildHandle

KGLHD

Child 1

Child 2

Heap 0

KGLOB

X$KGLOB

ParentHandle

KGLHD

STOP

Page 74: Inside rac

© 2006 Julian Dykejuliandyke.com

74

Library Cache Object - Child

KGLHD

ChildHandle

ChildObject

SELECTStatement

Heap 6

KGLOB

SubheapHeader

SubheapHeader

Heap 0

SubqueryHeader

Statistics,Optimizer

Environment,BindVariables

X$KGLOB

STOP

Page 75: Inside rac

© 2006 Julian Dykejuliandyke.com

75

Library Cache In general

Locks are required for parsing Externalized in X$KGLLK

Pins are required for execution Externalized in X$KGLPN

Each KGLHD structure has a set of double linked lists including; Locks Pins

Page 76: Inside rac

© 2006 Julian Dykejuliandyke.com

76

X$KGLPN

X$KGLLK

Library Cache Object - Locks & Pins

ChildHandle

ChildObject

KGLOB

X$KGLOB

STOP

LockLock

Pin

Lock

Pin Pin

KGLHD

Page 77: Inside rac

© 2006 Julian Dykejuliandyke.com

77

Namespaces In Oracle 10.2 there are 64 library cache namespaces Externalized by KGLHDNSP in X$KGLOB

CRSR LOB REIP RMGR JVSD RELS MVOBINX NSCPD

TABL DIR CPOB XDBS STFG RELD STBO JSLV

BODY QUEU EVNT PPLN TRANS IFSD HTSO MODL

TRGR OBJG SUMM PCLS RELC XDBC JSGA Unused

INDX PROP DIMM SUBS RULE USAG JSET Unused

CLST JVSC CTS LOCS STRM MVOBTBL TABLE Unused

KGLT JVRE OUTL RMOB REVC JSQI CLST Unused

PIPE ROBJ RULS RSMD STAP CDC INDX Unused

Page 78: Inside rac

© 2006 Julian Dykejuliandyke.com

78

Namespaces Library cache statistics can be dumped using:

ALTER SESSION SET EVENTS'IMMEDIATE TRACE NAME LIBRARY_CACHE LEVEL 1';

For example:

LIBRARY CACHE STATISTICS:namespace gets hit ratio pins hit ratio reloads invalids-------------- --------- --------- --------- --------- ---------- ----------CRSR 2403 0.086 33698 0.933 435 0TABL 4368 0.578 10032 0.657 961 0BODY 127 0.717 211 0.801 4 0TRGR 4 0.000 45 0.911 0 0INDX 81 0.272 83 0.036 21 0CLST 101 0.921 264 0.958 3 0KGLT 0 0.000 0 0.000 0 0PIPE 0 0.000 0 0.000 0 0LOB 0 0.000 0 0.000 0 0DIR 0 0.000 0 0.000 0 0QUEU 156 0.904 5886 0.997 0 0....

Page 79: Inside rac

© 2006 Julian Dykejuliandyke.com

79

V$LIBRARYCACHE Subset of rows from X$KGLST Contains 11 rows in Oracle 10.2

NAMESPACE VARCHAR2(15)

GETS NUMBER

GETHITS NUMBER

GETHITRATIO NUMBER

PINS NUMBER

PINHITS NUMBER

PINHITRATIO NUMBER

RELOADS NUMBER

INVALIDATIONS NUMBER

DLM_LOCK_REQUESTS NUMBER

DLM_PIN_REQUESTS NUMBER

DLM_PIN_RELEASES NUMBER

DLM_INVALIDATION_REQUESTS NUMBER

DLM_INVALIDATIONS NUMBER

RAC Specific

Statistics

Page 80: Inside rac

© 2006 Julian Dykejuliandyke.com

80

SELECT inst_id, DECODE (indx,

0,'SQL AREA',1,'TABLE/PROCEDURE',2,'BODY',3,'TRIGGER', 4,'INDEX',5,'CLUSTER',6,'OBJECT',7,'PIPE',13,'JAVA SOURCE',14,'JAVA RESOURCE',32,'JAVA DATA','

?'), kglstget,kglstght, DECODE (kglstget,0,1,kglstght/kglstget),kglstpin,kglstpht, DECODE (kglstpin,0,1,kglstpht/kglstpin),kglstrld,kglstinv, kglstlrq,kglstprq,kglstprl,kglstirq,kglstmiv FROM x$kglst WHERE indx<8 OR indx=13 OR indx=14 OR indx=32

V$LIBRARYCACHE Based on X$KGLST

Names are generated in dynamic performance view

Only selected rows from X$KGLST

Page 81: Inside rac

© 2006 Julian Dykejuliandyke.com

81

X$KGLST Contains one row for each namespace (59 rows in 10.2)

ADDR RAW(4)

INDX NUMBER

INST_ID NUMBER

KGLSTCMS NUMBER

KGLSTCHT NUMBER

KGLSTGET NUMBER

KGLSTGHT NUMBER

KGLSTPIN NUMBER

KGLSTPHT NUMBER

KGLSTRLD NUMBER

KGLSTINV NUMBER

KGLSTLRQ NUMBER

KGLSTPRQ NUMBER

KGLSTPRL NUMBER

KGLSTIRQ NUMBER

KGLSTMIV NUMBER

RAC Specific

Statistics

Page 82: Inside rac

© 2006 Julian Dykejuliandyke.com

82

GlobalEnqueueServices

Page 83: Inside rac

© 2006 Julian Dykejuliandyke.com

83

V$LOCK_TYPE Introduced in Oracle 10.1 Lists all lock types Wildcards for

Library Cache Locks and Pins Row Cache Locks

TYPE VARCHAR2(64)

NAME VARCHAR2(64)

ID1_TAG VARCHAR2(64)

ID2_TAG VARCHAR2(64)

IS_USER VARCHAR2(3)

DESCRIPTION VARCHAR2(4000)

Page 84: Inside rac

© 2006 Julian Dykejuliandyke.com

84

Library Cache Objects Library Cache Objects can be dumped using:

ALTER SESSION SET EVENTS'IMMEDIATE TRACE NAME LIBRARY_CACHE LEVEL 4';

BUCKET 127469:LIBRARY OBJECT HANDLE: handle=2bb8dfbc mutex=0x2bb8e070(0)name=US01.T1hash=b2f454b86387761e02fc7e686e37f1ed timestamp=01-14-2006 22:04:06namespace=TABL flags=KGHP/TIM/MED/[40000000]kkkk-dddd-llll=0000-0701-0701 lock=0 pin=0 latch#=1 hpc=0002 hlc=0002lwt=0x2bb8e018[0x2bb8e018,0x2bb8e018] ltm=0x2bb8e020[0x2bb8e020,0x2bb8e020]pwt=0x2bb8dffc[0x2bb8dffc,0x2bb8dffc] ptm=0x2bb8e004[0x2bb8e004,0x2bb8e004]ref=0x2bb8e038[0x2bb8e038,0x2bb8e038] lnd=0x2bb8e044[0x2bb7a7ac,0x2bb8e410]

LOCK INSTANCE LOCK: id=LBb2f454b86387761ePIN INSTANCE LOCK: id=NBb2f454b86387761e mode=S release=F flags=[00INVALIDATION INSTANCE LOCK: id=IV0000c9890e170507 mode=SLIBRARY OBJECT: object=2caede30type=TABL flags=EXS/LOC[0005] pflags=[0000] status=VALD load=0

BUCKET 127469 total object count=1

For example:

Page 85: Inside rac

© 2006 Julian Dykejuliandyke.com

85

Library Cache Instance Locks Instance Locks created for

Library Cache Locks Library Cache Pins

Lock name based on object hash value (KGLNAHSH) For example:

BUCKET 127469:LIBRARY OBJECT HANDLE: handle=2bb8dfbc mutex=0x2bb8e070(0)name=US01.T1hash=b2f454b86387761e02fc7e686e37f1ed timestamp=01-14-2006 22:04:06namespace=TABL flags=KGHP/TIM/MED/[40000000]kkkk-dddd-llll=0000-0701-0701 lock=0 pin=0 latch#=1 hpc=0002 hlc=0002lwt=0x2bb8e018[0x2bb8e018,0x2bb8e018] ltm=0x2bb8e020[0x2bb8e020,0x2bb8e020]pwt=0x2bb8dffc[0x2bb8dffc,0x2bb8dffc] ptm=0x2bb8e004[0x2bb8e004,0x2bb8e004]ref=0x2bb8e038[0x2bb8e038,0x2bb8e038] lnd=0x2bb8e044[0x2bb7a7ac,0x2bb8e410]

LOCK INSTANCE LOCK: id=LBb2f454b86387761ePIN INSTANCE LOCK: id=NBb2f454b86387761e mode=S release=F flags=[00INVALIDATION INSTANCE LOCK: id=IV0000c9890e170507 mode=SLIBRARY OBJECT: object=2caede30type=TABL flags=EXS/LOC[0005] pflags=[0000] status=VALD load=0

BUCKET 127469 total object count=1

Page 86: Inside rac

© 2006 Julian Dykejuliandyke.com

86

Library Cache Instance Locks For example in library cache dump

Library cache pin instance lock is id=NBb2f454b86387761e

In X$KJIRFT this KJIRFTRN column [0xb2f454b8][0x6387761e],[NB]

Page 87: Inside rac

© 2006 Julian Dykejuliandyke.com

87

Namespaces->Instance Locks Slide 1 of 3

Namespace Lock Pin

JVSC LN NN

JVRE LO NO

ROBJ LP NP

REIP LQ NQ

CPOB LR NR

EVNT LS NS

SUMM LT NT

DIMM LU NU

CTS LV NV

OUTL LW NW

RULS LX NX

RMGR LY NY

XDBS LZ NZ

Namespace Lock Pin

CRSR LA NA

TABL LB NB

BODY LC NC

TRGR LD ND

INDX LE NE

CLST LF NF

KGLT LG NG

PIPE LH NH

LOB LI NI

DIR LJ NJ

QUEU LK NK

OBJG LL NL

PROP LM NM

Page 88: Inside rac

© 2006 Julian Dykejuliandyke.com

88

Namespaces->Instance Locks Slide 2 of 3

Namespace Lock Pin

STAP EN GN

RELS EO GO

RELD EP GP

IFSD EQ GQ

XDBC ER GR

USAG ES GS

MVOBTBL ET GT

JSQI EU GU

CDC EV GV

MVOBINX EW GW

STBO EX GX

HTSO EY GY

JSGA EZ GZ

Namespace Lock Pin

PPLN EA GA

PCLS EB GB

SUBS EC GC

LOCS ED GD

RMOB EE GE

RSMD EF GF

JVSD EG GG

STFG EH GH

TRANS EI GI

RELC EJ GJ

RULE EK GK

STRM EL GL

REVC EM GM

Page 89: Inside rac

© 2006 Julian Dykejuliandyke.com

89

Namespaces->Instance Locks Slide 3 of 3

Namespace Lock Pin

JSET VA YA

TABLE VB YB

CLST VC YC

INDX VD YD

NSCPD VE YE

JSLV VF YF

MODL VG YG

Unused VH YH

Unused VI YI

Unused VJ YJ

Unused VK YK

Unused VL YL

Unused VM YM

Page 90: Inside rac

© 2006 Julian Dykejuliandyke.com

90

V$ROWCACHECACHE# NUMBER

TYPE VARCHAR2(11)

SUBORDINATE# NUMBER

PARAMETER VARCHAR2(32)

COUNT NUMBER

USAGE NUMBER

FIXED NUMBER

GETS NUMBER

GETMISSES NUMBER

SCANS NUMBER

SCANMISSES NUMBER

SCANCOMPLETES NUMBER

MODIFICATIONS NUMBER

FLUSHES NUMBER

DLM_REQUESTS NUMBER

DLM_CONFLICTS NUMBER

DLM_RELEASES NUMBER

RAC Specific

Statistics

Page 91: Inside rac

© 2006 Julian Dykejuliandyke.com

91

V$ROWCACHE Based on X$KQRST Contains 42 rows in Oracle 10.2

34 Parent Cache 8 Subordinate Caches

Page 92: Inside rac

© 2006 Julian Dykejuliandyke.com

92

Row Caches->Instance Locks Slide 1 of 2

Cache# Namespace Lock

0 dc_tablespaces QA

1 dc_free_extents QB

2 dc_segments QC

3 dc_rollback_segments QD

4 dc_used_extents QE

5 dc_tablespace_quotas QF

6 dc_files QG

7 dc_users QH

8 dc_objects QI

9 dc_qmc_cache_entries QJ

10 dc_usernames QK

11 dc_object_ids QL

12 dc_constraints QM

Cache# Namespace Lock

13 dc_sequences QN

14 dc_profiles QO

15 dc_database_links QP

16 dc_histogram_defs QQ

17 dc_global_oids QR

18 dc_outlines QS

19 dc_table_scns QT

20 rule_info QU

21 rule_or_piece QV

22 dc_awr_control QW

23 dc_qmc_ldap_cache... QX

24 outstanding_alerts QY

25 dc_hintsets QZ

Page 93: Inside rac

© 2006 Julian Dykejuliandyke.com

93

Row Caches->Instance Locks Slide 2 of 2

Cache# Namespace Lock

26 global_database_name ??

27 qmtmrcin_cache_entries ??

28 qmtmrctn_cache_entries ??

29 qmtmrcip_cache_entries ??

30 qmtmrctp_cache_entries ??

31 qmtmrciq_cache_entries ??

32 qmtmrctq_cache_entries ??

33 kqlsubheap_object ??

Cache# = KQRSTCID

Page 94: Inside rac

© 2006 Julian Dykejuliandyke.com

94

Row Caches Row cache statistics can be dumped using:

ALTER SESSION SET EVENTS'IMMEDIATE TRACE NAME ROW_CACHE LEVEL 1';

For example:

ROW CACHE STATISTICS:cache size gets misses hit ratio DLM req-------------------------- ------- ------- ------ --------- -------dc_tablespaces 496 8909 7 0.999 7dc_free_extents 388 0 0 0.000 0dc_segments 444 4191 569 0.880 709dc_rollback_segments 452 4210 31 0.993 74dc_used_extents 400 0 0 0.000 0dc_tablespace_quotas 396 0 0 0.000 0dc_files 412 0 6 0.000 6dc_users 520 9042 23 0.997 23 dc_users 260 0 0 0.000 0 dc_user_grants 108 24 17 0.585 0 dc_app_role 100 0 0 0.000 0....

Page 95: Inside rac

© 2006 Julian Dykejuliandyke.com

95

BUCKET 48205: row cache parent object: address=0x2bb8dcd8 cid=8(dc_objects) hash=313bbc4c typ=9 transaction=(nil) flags=00000002 own=0x2bb8dd44[0x2bb8dd44,0x2bb8dd44] wat=0x2bb8dd4c[0x2bb8dd4c,0x2bb8dd4c] mode=S status=VALID/-/-/-/-/-/-/-/- request=N release=FALSE flags=0 instance lock id=QI f611ffad e31d1de3 set=0, complete=FALSE data= 00000037 31540002 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000000 00000000 00000000 ...... 00000000 00000000 00000000 0000c989 00000001 0000c989 016a7802 0705170e 0e016a78 78070517 170e016a 00010705 00000000 00000000 00000000 00000000 00000000 00000006 BUCKET 48205 total object count=1

Row Caches Row cache statistics can be dumped using:

ALTER SESSION SET EVENTS'IMMEDIATE TRACE NAME ROW_CACHE LEVEL 8';

For example:

T1

Instance LockQI F611FFAD E31D1DE3

Cache ID 8dc_objects

Page 96: Inside rac

© 2006 Julian Dykejuliandyke.com

96

GESResource

Global Enqueue Services

KJIRFT

KJILKFTGES

EnqueueKJILKFT KJILKFT

KJILKFTKJILKFT

KJILKFT

Holders Converters Waiters

Page 97: Inside rac

© 2006 Julian Dykejuliandyke.com

97

Resource Names Contain

1 x two byte name 2 x 32 bit integer tag fields

Used with Resources Enqueues Locks Global Enqueue Services

Global Cache Services Block are resources with resource name BL

Page 98: Inside rac

© 2006 Julian Dykejuliandyke.com

98

Resource Names Externalized inconsistently throughout Oracle in

V$/GV$ dynamic performance views X$ fixed tables Dumps and trace files

Stored consistently in internal C structures including KJBR KJIRFT

Other structures reference the resource names in these structures including KJBL KJILFKT

Page 99: Inside rac

© 2006 Julian Dykejuliandyke.com

99

GES Parameters GES Resources

Number of GES resource structures probably determined by

_lm_ress parameter Stored in heap Externalized in X$KJIRFT

GES Enqueues Number of GES enqueue structures probably determined

by _lm_locks parameter

Stored in segmented array Externalized in X$KJILKFT

Page 100: Inside rac

© 2006 Julian Dykejuliandyke.com

100

X$KJIRFT Externals global enqueue resources Does NOT include global cache resources

ADDR RAW(4)

INDX NUMBER

INST_ID NUMBER

KJIRFTRP RAW(4)

KJIRFTRN VARCHAR2(30)

KJIRFTCQ NUMBER

KJIRFTGQ NUMBER

KJIRFTPR NUMBER

KJIRFTRDN VARCHAR2(25)

KJIRFTMN NUMBER

KJIRFTNCL VARCHAR2(9)

KJIRFTVS VARCHAR2(32)

KJIRFTVB VARCHAR2(64)

Page 101: Inside rac

© 2006 Julian Dykejuliandyke.com

101

X$KJILKFT

ADDR RAW(4)

INDX NUMBER

INST_ID NUMBER

KJILKFTLKP RAW(4)

KJILKFTGL VARCHAR2(9)

KJILKFTRL VARCHAR2(9)

KJILKFTRP RAW(4)

KJILKFTRN1 VARCHAR2(30)

KJILKFTRN2 VARCHAR2(30)

KJILKFTPID NUMBER

KJILKFTXID0 NUMBER

KJILKFTXID1 NUMBER

KJILKFTGID NUMBER

KJILKFTOODD NUMBER

KJILKFTOOPT NUMBER

KJILKFTOOPO NUMBER

KJILKFTOONXID NUMBER

KJILKFTCOGV NUMBER

KJILKFTCOPV NUMBER

KJILKFTCONV NUMBER

KJILKFTCODV NUMBER

KJILKFTCONQ NUMBER

KJILKFTCOEP NUMBER

KJILKFTCONDDW NUMBER

KJILKFTCONDDB NUMBER

KJILKFTWQ NUMBER

KJILKFTLS VARCHAR2(64)

KJILKFTASTE0 NUMBER

KJILKFTON NUMBER

KJILKFTBLKED NUMBER

KJILKFTBLKER NUMBER

Page 102: Inside rac

© 2006 Julian Dykejuliandyke.com

102

V$GES_RESOURCE Contains rows from both KJIRFT and KJBR Synonym for V$DLM_RESS

RESP RAW(4)

RESOURCE_NAME VARCHAR2(30)

ON_CONVERT_Q NUMBER

ON_GRANT_Q NUMBER

PERSISTENT_RES NUMBER

MASTER_NODE NUMBER

NEXT_CVT_LEVEL VARCHAR2(9)

VALUE_BLK_STATE VARCHAR2(32)

VALUE_BLK VARCHAR2(64)

Page 103: Inside rac

© 2006 Julian Dykejuliandyke.com

103

V$GES_RESOURCE Contains rows from both KJIRFT and KJBR Synonym for V$DLM_RESS

SELECT inst_id, kjirftrp, kjirftrn, kjirftcq, kjirftgq, kjirftpr, kjirftmn, kjirftncl, kjirftvs, kjirftvb

FROM x$kjirft UNION ALL SELECT

inst_id, kjbrresp, kjbrname, DECODE (kjbrcvtq, '00', 0, 1),DECODE (kjbrgrantq, '00', 0, 1), 1, kjbrmaster, kjbrncvl,'KJUSERVS_NOVALUE', '0x0'

FROM x$kjbr

Page 104: Inside rac

© 2006 Julian Dykejuliandyke.com

104

V$GES_ENQUEUE Contains rows from both KJILKFT and KJBL

HANDLE RAW(4)

GRANT_LEVEL VARCHAR2(9)

REQUEST_LEVEL VARCHAR2(9)

RESOURCE_NAME1 VARCHAR2(30)

RESOURCE_NAME2 VARCHAR2(30)

PID NUMBER

TRANSACTION_ID0 NUMBER

TRANSACTION_ID1 NUMBER

GROUP_ID NUMBER

OPEN_OPT_DEADLOCK NUMBER

OPEN_OPT_PERSISTENT NUMBER

OPEN_OPT_PROCESS_OWNED NUMBER

OPEN_OPT_NO_XID NUMBER

CONVERT_OPT_GETVALUE NUMBER

CONVERT_OPT_PUTVALUE NUMBER

CONVERT_OPT_NOVALUE NUMBER

CONVERT_OPT_DUBVALUE NUMBER

CONVERT_OPT_NOQUEUE NUMBER

CONVERT_OPT_EXPRESS NUMBER

CONVERT_OPT_NODEADLOCKWAIT NUMBER

CONVERT_OPT_NODEADLOCKBLOCK NUMBER

WHICH_QUEUE NUMBER

STATE VARCHAR2(64)

AST_EVENT0 NUMBER

OWNER_NODE NUMBER

BLOCKED NUMBER

BLOCKER NUMBER

Page 105: Inside rac

© 2006 Julian Dykejuliandyke.com

105

V$GES_ENQUEUE Contains rows from both KJILKFT and KJBL

SELECT inst_id, kjilkftlkp, kjilkftgl, kjilkftrl, kjilkftrn1, kjilkftrn2, kjilkftpid,kjilkftxid0, kjilkftxid1, kjilkftgid, kjilkftoodd, kjilkftoopt, kjilkftoopo,kjilkftoonxid, kjilkftcogv, kjilkftcopv, kjilkftconv, kjilkftcodv, kjilkftconq,kjilkftcoep, kjilkftconddw, kjilkftconddb, kjilkftwq, kjilkftls, kjilkftaste0,kjilkfton, kjilkftblked, kjilkftblker

FROM x$kjilkft UNION ALL SELECT inst_id,

kjbllockp, kjblgrant, kjblrequest, kjblname, kjblname2, 0, 0, 0, 0, 0, 1, 0, 1,0, 0, 0, 0, 0, 0, 0, 0, kjblqueue, kjbllockst, 0, kjblowner, kjblblocked,

kjblblocker FROM x$kjbl

Page 106: Inside rac

© 2006 Julian Dykejuliandyke.com

106

Thank you for your interest

For more information and to provide feedback

please contact me

My e-mail address is:[email protected]

My website address is:

www.juliandyke.com