You are on page 1of 59

SGA

Internals
Julian Dyke
Independent Consultant
Web Version
1

2005 Julian Dyke

Agenda

Introduction
SGA
Granules
Fixed SGA
Buffer Cache
Shared Pool
Permanent Areas
Heaps
Subheaps
Library Cache
Reserved Area
Log Buffer
Conclusion

2005 Julian Dyke

Introduction

Examples based on
32 bit architecture
Red Hat 2.1 AS
Oracle 9.2.0.4
Single (non-RAC) instance

Examples affected by
Oracle version
Operating system
Single instance / RAC
Architecture (32/64)
Parameters

2005 Julian Dyke

Word Length

Word length can be


32 bit - 4 byte pointers
64 bit - 8 byte pointers

Also affects
size of some integer variables e.g. int
word alignment

When moving from 32 bit to 64 bit Oracle recommends


doubling
SHARED_POOL_SIZE
SHARED_POOL_RESERVED_SIZE
LARGE_POOL_SIZE

2005 Julian Dyke

Double Linked Lists - Insertion

Frequently used in SGA structures


Each element includes pointers to next and previous elements
Requires 8 bytes (32 bit systems) or 16 bytes (64 bit systems)

Head
Tail

5000F430
5000F430
5000F430

2005 Julian Dyke

STOP

55443080

55845C54

52175AC0

Double Linked Lists - Deletion

Double linked lists are more efficient for


insertion
deletion

Head
Tail

5000F430
55443080
52175AC0

2005 Julian Dyke

STOP

55443080
55845C54
5000F430

55845C54
52175AC0
55443080

52175AC0
5000F430
55845C54

Memory Areas

An Oracle process includes


the following memory areas

Executable
PGA/Session Heap
Shared Libraries
SGA
Stack

08048000

Executable

0AAA28C0

PGA
Session Heap

40000000

50000000

Shared
Libraries

SGA

584A4000
Stack

2005 Julian Dyke

STOP

Shared Memory

Shared memory can be dumped to trace file using


$ sqlplus /nolog
SQL> CONNECT SYS/<password> AS SYSDBA
Connected
SQL> ORADEBUG SETMYPID
ORADEBUG SETMYPID
Statement processed
ORADEBUG IPC
SQL> ORADEBUG IPC
Information written to trace file
SQL> ORADEBUG TRACEFILE_NAME
/var/opt/oracle/admin/LX092001/udump/lx092001_ora_9824.trc

2005 Julian Dyke

ORADEBUG IPC - Example


Area#0`FixedSize'containingSubareas00
Totalsize000000000006e5ccMinimumSubareasize00000000
AreaSubareaShmidStableAddrActualAddr

001638400x000000500000000x00000050000000
FixedSubareasizeSegmentsize
Area
000000000006f0000000000008800000
Area#1`VariableSize'containingSubareas11
Totalsize0000000008000000MinimumSubareasize00400000
AreaSubareaShmidStableAddrActualAddr
111638400x0000005006f0000x0000005006f000
Variable
Area
SubareasizeSegmentsize
00000000083910000000000008800000
Area#2`RedoBuffers'containingSubareas22
Totalsize00000000000a3000MinimumSubareasize00000000
AreaSubareaShmidStableAddrActualAddr
221638400x000000584000000x00000058400000
SubareasizeSegmentsize
Redo Buffers
00000000000a30000000000008800000
Area#3`skgmoverhead'containingSubareas33
Totalsize0000000000001000MinimumSubareasize00000000
AreaSubareaShmidStableAddrActualAddr
331638400x000000584a30000x000000584a3000
OS Specific
SubareasizeSegmentsize
00000000000010000000000008800000

2005 Julian Dyke

STOP

V$SGA

Describes sizes of main components in SGA


Used by SHOW SGA command in SQL*Plus

SELECT name, value FROM v$sga;


Name
Fixed Size

452044

Variable Size

83886080

Database Buffers

50331648

Redo Buffers

Value

667648

Based from X$KSMSD


X$KSMSD derived from ksmstv_ (ksmst) in Fixed SGA

2005 Julian Dyke

Shared Global Area

Contains
Fixed SGA
Buffer Pool
Shared Pool
Large Pool
Java Pool
Streams Pool
Redo buffers
Buffer Pool includes
Default cache
Keep and Recycle cache
2K, 4K, 8K, 16K and 32K cache

2005 Julian Dyke

Oracle 7.0 and above


Oracle 8.0 and above
Oracle 8.1.5 and above
Oracle 10.1 and above

Oracle 8.0 and above


Oracle 9.0.1 and above

Granules

Introduced in Oracle 9.0.1

SGA divided into granules

In Oracle 9.2 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

2005 Julian Dyke

Granules

Pool parameters rounded up to nearest granule

Each pool occupies one or more granules

Different buffer caches held in separate granules

First "granule" contains


Fixed SGA
Granule directory
Heap headers

Last "granule" contains


Guard pages
Redo buffer
Operating system specific overhead
Remaining space unused

2005 Julian Dyke

Granules
SGA_MAX_SIZE = 128M
DB_CACHE_SIZE = 48M
JAVA_POOL_SIZE = 20M
LARGE_POOL_SIZE = 12M
SHARED_POOL_SIZE = 20M

4M

Fixed SGA 4M
Free 16M
Buffer Pool 48M

128M

Java Pool 20M


Large Pool 12M
Shared Pool 32M

Note shared pool size


automatically increased
from 20M to 32M

2005 Julian Dyke

STOP

Redo Buffer 4M
4M

Granule Operations

The following pools can be dynamically resized


Pool

Parameter

Version

Shared Pool

SHARED_POOL_SIZE

9.0.1 and above

Default

DB_CACHE_SIZE

9.0.1 and above

2K

DB_2K_CACHE_SIZE

9.0.1 and above

4K

DB_4K_CACHE_SIZE

9.0.1 and above

8K

DB_8K_CACHE_SIZE

9.0.1 and above

16K

DB_16K_CACHE_SIZE

9.0.1 and above

32K

DB_32K_CACHE_SIZE

9.0.1 and above

Keep

DB_KEEP_CACHE_SIZE

9.0.1 and above

Recycle

DB_RECYCLE_CACHE_SIZE

9.0.1 and above

Large Pool

LARGE_POOL_SIZE

9.2.0 and above

Java Pool

JAVA_POOL_SIZE

10.1 and above

Streams pool cannot be dynamically resized in Oracle 10.1

2005 Julian Dyke

Granule Views

The following views support dynamic memory management

Introduced in Oracle 9.2


V$SGA_DYNAMIC_COMPONENTS
V$SGA_DYNAMIC_FREE_MEMORY
V$SGA_CURRENT_RESIZE_OPS
V$SGA_RESIZE_OPS
Not always reliable

Introduced in Oracle 10.1


V$SGAINFO

2005 Julian Dyke

X$KSMGE
Introduced

in Oracle 9.2
Describes individual granules

ADDR

RAW(4)

INDX

NUMBER

INST_ID

NUMBER

GRANNUM

NUMBER

GRANTYPE

NUMBER

GRANSTATE

VARCHAR2(16)

GRANFLAGS

NUMBER

LOCALITY

NUMBER

BASEADDR

RAW(4)

GRANSIZE

NUMBER

GRANNEXT

NUMBER

GRANPREV

NUMBER

2005 Julian Dyke

Granule ID
0
2
3
4
5

Free
Shared Pool
Large Pool
Java Pool
Buffer Pool

INVALID (Free)
ALLOCATED
Granule Address
Granule Size
Next granule ID
Previous granule ID

Granule Dumps

Granules can be dumped using


ALTER SESSION SET EVENTS
immediate trace name granulelist level <level>

where <level> is
Heap

2005 Julian Dyke

Level

Null Granule

255

Home Granule

511

Shared Pool

767

Large Pool

1023

Java Pool

1279

Buffer Cache

1535

Fixed SGA

Area containing all fixed variables


Contains pointers to all other structures in SGA
Variable name, type, address and size
determined when Oracle executable is linked
Located at start of first granule of SGA
50000000

Fixed SGA
5001D9E8

Granule Directory

5001DF50

Heap Headers

2005 Julian Dyke

STOP

X$KSMFSV

Externalises name, type, address and size of all variables in


fixed SGA
ADDR

RAW(4)

INDX

NUMBER

INST_ID

NUMBER

KSMFSNAM

VARCHAR2(64)

KSMFSTYP

VARCHAR2(64)

KSMFSADR

RAW(4)

KSMFSSIZ

NUMBER

SGA can be dumped using


ORADEBUG FIXEDSGA

2005 Julian Dyke

Name
Type
Address
Size

Global Area Dumps

Global areas can be dumped using


ALTER SESSION SET EVENTS
immediate trace name global_area level <level>

where <level> is
Heap

Level

PGA

SGA

PGA + SGA

UGA

PGA + UGA

SGA + UGA

PGA + SGA + UGA

More detail is included at levels 0x08 0x10 0x18 (OR)

2005 Julian Dyke

X$KSMMEM

Externalises contents of all locations in the SGA


ADDR

RAW(4)

INDX

NUMBER

INST_ID

NUMBER

KSMMMVAL

RAW(4)

Does not work on Windows platforms

2005 Julian Dyke

Address

Value

Buffer Cache
51400000

DB_CACHE_SIZE = 48M
DB_BLOCK_SIZE = 8192

51800000
51C00000

Buffer Cache includes 12 x 4M granules

52000000

Each granule contains 500 buffers

52400000

Buffer Cache contains 6000 buffers

52800000
52C00000

Block
Size

53000000

4mb

53400000
53800000
53C00000
54000000

2005 Julian Dyke

STOP

Buffers Per
Granule
16mb

2048

1875

7503

4096

979

3916

8192

500

2002

16384

253

1012

32768

127

509

Buffer Headers

Each buffer has a buffer header


In 9.2.0.4 buffer headers are 188 bytes
Buffer headers are stored in same granule as buffers
Buffer headers include
Replacement list
Hash list
Pointer to buffer

Buffer
Headers

Buffers

Granule

2005 Julian Dyke

STOP

X$BH

Externalises buffer headers


ADDR

RAW(4)

INDX

NUMBER

Hash List Address

INST_ID

NUMBER

Block Size

HLADDR

RAW(4)

BLSIZ

NUMBER

NXT_HASH

RAW(4)

PRV_HASH

RAW(4)

NXT_REPL

RAW(4)

PRV_REPL

RAW(4)

TS#

NUMBER

FILE#

NUMBER

Relative File Number

DBARFIL

NUMBER

Block Number

DBABLK

NUMBER

OBJ

NUMBER

Object ID

BA

RAW(4)

Buffer Address

CR_SCN_BAS

NUMBER

2005 Julian Dyke

Hash List
Replacement List
Tablespace#
Absolute File Number

Shared Pool
56400000

Shared Pool includes

Permanent Area

Segmented Arrays

56C00000

Library Cache

57000000

Row Cache

Reserved Area

56800000

57400000
57800000
57C00000
58000000

2005 Julian Dyke

STOP

Shared Pool occupies

8 x 4M granules = 32M

SHARED_POOL_SIZE = 20M

V$SGASTAT

Describes sizes of individual components in SGA


SELECT pool, name, value FROM v$sgastat;
Pool

Name
fixed sga
buffer cache

Value
452044
50331648

log buffer

656384

shared pool

enqueues

51680

shared pool

sessions

91656

shared pool

library cache

1480240

shared pool

dictionary cache

1614976

shared pool

free memory

19746760

large pool

free memory

12582912

java pool

free memory

20971520

2005 Julian Dyke

Permanent Areas

Allocated at instance startup


Contain structures such as
processes
sessions
segmented arrays
SELECT ksmchptr, ksmchsiz
FROM x$ksmsp
WHERE ksmchcls = 'perm';
Address

3967868

5681F000

2718736

56C00000
57000000
57400000
57800000
57C00000

905116

56C1F00

4063188

5701F000

4067328

2005 Julian Dyke

STOP

56800000

Size

5641F000

56AB6C10

56400000

58000000

Sessions

Array of sessions stored in shared pool permanent area


Allocated at instance startup
Number of elements specified by SESSIONS parameter
In Oracle 9.2 each element is 2412 bytes
Session array externalised by
X$KSUSE
General information
Used by V$SESSION
X$KSUSESTA
Statistics
Used by V$SESSTAT
X$KSUSECST
Current Waits
Used by V$SESSION_WAIT

2005 Julian Dyke

Sessions
ksusga_
struct ksusg

Array of
Pointers

2005 Julian Dyke

STOP

X$KSUSE
V$SESSION

X$KSUSESTA
V$SESSTAT

X$KSUSECST
V$SESSION_WAIT

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

2005 Julian Dyke

Segmented Arrays
Segmented
Arrays

Call

Segmented
Array
Segmented
Array
Segmented
Header
Array

Segmented
Array
Header

2005 Julian Dyke

STOP

Enqueues

Enqueue
Resources

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)

2005 Julian Dyke

Name of array

Number of
chunks
Address of parent
heap

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
Heap

Extent 0

Extent 1

Extent 2

Header

Free List

2005 Julian Dyke

STOP

Chunks

Chunks

Chunks contain
header
body

Size of chunk header


dependent on chunk type
16 bytes <= size <= 32 bytes

Chunks chained through extent

Chunks can be
permanent
recreatable
freeable
free

2005 Julian Dyke

STOP

Extent

Extent
Header
Chunk
Header
Chunk
Body

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
Type (recreate only)
0x18 - KGL Handle
0x24 - Fixed Allocation
0x74 - KQR PO
0x80 - KQR SO
0xFFF - Extended header
Address of parent

2005 Julian Dyke

Heap Dumps

Heaps can be dumped using


ALTER SESSION SET EVENTS
immediate trace name heapdump level <level>;

where <level> is
Heap

Summary

Detail

PGA

1025

SGA

2050

UGA

4100

CGA Current Call

8200

CGA User Call

16

16400

LGA Large Pool

32

32800

2005 Julian Dyke

Free List

Heap free lists contain 255 buckets

Each bucket contains double linked list to free chunks

Bucket sizes increase in


increments of 4 bytes - 16, 20, 24, 28, 32 ... 808, 812
increments of 64 bytes - 876, 940, 1004 ... 3948, 4012
then 4108, 8204, 16396, 32780, 65548

Reduces fragmentation

2005 Julian Dyke

Free List

Example

Heap Header

Buckets

2005 Julian Dyke

16
20
24
28
32
36
40
44
48
52
56
60
64

24 byte chunks

36 byte chunks

52 byte chunks

Subheaps

Heaps can contain subheaps


Objects can have up to 10 subheaps
SQL statements include subheaps 0 and 6
Subheaps consist of one or more extents
Subheaps have heap headers
Subheap header format similar to heap header format
Only one freelist containing all free space
Subheap
Header

Free
List

2005 Julian Dyke

Extent 0

Extent 1

Chunk

Extent 2

Subheap Dumps

In Oracle 9.0.1 and below to dump a subheap, first obtain the


address of the subheap and convert to decimal
0x56b95c0c = 1454988300

For a summary dump use


ALTER SESSION SET EVENTS
immediate trace name heapdump_addr level 1454988300;

For a detailed dump add 1 to the address e.g.


ALTER SESSION SET EVENTS
immediate trace name heapdump_addr level 1454988301;

In Oracle 9.2 and above to dump the subheap summary use


ALTER SESSION SET EVENTS
immediate trace name heapdump_addr level 1, addr 0x56b95c0c;

For a detailed dump use


ALTER SESSION SET EVENTS
immediate trace name heapdump_addr level 2, addr 0x56b95c0c;

2005 Julian Dyke

Subheap Dumps

Example - dump the SGA using


ALTER SESSION SET EVENTS immediate trace name heapdump level 2;

Chunk56b94dc8sz=304recreate"KGLhandles"latch=0x56efd918
Chunk56b94ef8sz=560freeable"librarycache"ds=0x56b95c0c
Chunk56b95128sz=540recreate"KQRPO"latch=(nil)
Chunk56b95344sz=540recreate"KQRPO"latch=0x56d719f4
Chunk56b95560sz=1116freeable"KGLSheap"ds=0x56b96d1c
Chunk56b959bcsz=20free""
Chunk56b959d0sz=560recreate"librarycache"latch=(nil)
ds56b95c0csz=1120ct=2
56b94ef8sz=560
Chunk56b95c00sz=96freeable"librarycache"

Dump subheap using


ALTER SESSION SET EVENTS
immediate trace name heapdump_addr level 1, addr 0x56b95c0c;

2005 Julian Dyke

Subheap Dumps
Extent 0

Extent 1
Extent 2

Free List

HEAP DUMP heap name="library cache" desc=0x576193c4


extent sz=0x224 alt=32767 het=16 rec=9 flg=2 opc=2
parent=0x5000002c owner=0x5761826c nex=(nil) xsz=0x224
EXTENT 0 addr=0x57615130
Chunk 57615138 sz=
312
perm
"perm
Chunk 57615270 sz=
76
freeable "kgltbtab
Chunk 576152bc sz=
76
freeable "kgltbtab
Chunk 57615308 sz=
76
freeable "kgltbtab
EXTENT 1 addr=0x57616a88
Chunk 57616a90 sz=
512
perm
"perm
Chunk 57616c90 sz=
28
free
"
EXTENT 2 addr=0x57618254
Chunk 5761825c sz=
172
perm
"perm
Chunk 57618308 sz=
36
free
"
Total heap size
=
1288
FREE LISTS:
Bucket 0 size=0
Chunk 57616c90 sz=
28
Chunk 57618308 sz=
36
Total free space
=
64
UNPINNED RECREATABLE CHUNKS (lru
PERMANENT CHUNKS:
Chunk 57615138 sz=
312
Chunk 57616a90 sz=
512
Chunk 5761825c sz=
172
Permanent space
=
996

2005 Julian Dyke

free
free

"
"
"
"

alo=260

"
"

alo=512

"
"

alo=172

"
"

"
"

"perm
"perm
"perm

"
"
"

first):
perm
perm
perm

alo=260
alo=512
alo=172

X$KSMHP

Externalises chunks in a subheap


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)

2005 Julian Dyke

Address of data segment


Description of chunk type
Address of chunk
Size including header
Class
Perm
Free
Address of parent heap

X$KSMHP
SQL> SELECT COUNT(*) FROM x$ksmhp;
COUNT(*)
-------SQL> SELECT
COUNT(*) FROM
0
x$ksmhp;
SQL>
SELECT kglobhd6 FROM x$kglob
0 rows
WHERE kglnaobj = 'SELECT SUM(c1) FROM t1'
AND kglhdadr != kglhdpar;
KGLOBHD6
-------5755E798
SQL> SELECT COUNT(*) FROM x$ksmhp
WHERE ksmchds = HEXTORAW ('5755E798');
COUNT(*)
-------1

2005 Julian Dyke

STOP

Library Cache

Database objects
Tables
Views
Packages
Functions

Shared cursors
SQL statements
Anonymous PL/SQL block
Stored PL/SQL procedures and functions
Java stored procedures
Methods

2005 Julian Dyke

Library Cache

For example
CREATE TABLE t1
(
c1 NUMBER,
c2 NUMBER,
c3 NUMBER,
c4 NUMBER
);
CREATE INDEX i1 ON t1 (c1);
CREATE INDEX i2 ON t1 (c3);
SELECT SUM(c2)
FROM t1
WHERE c3 = 42
AND c4 < 2004;
0
1
2
3

0
1
2

SELECT STATEMENT
SORT (AGGREGATE)
TABLE ACCESS (BY INDEX ROWID) OF 'T1'
INDEX (RANGE SCAN) OF 'I2'

2005 Julian Dyke

STOP

Library Cache

512 x 1 word
pointers

Library Cache
Object Handle
256 x DLL
headers

Heap
ksmgsg_
struct kgsms

KGLHD
Library
Cache

KGLHD
KGLHD
KGLHD
512 x 256 =
131072 buckets

Anonymous
List

2005 Julian Dyke

STOP

KGLHD

KGLHD

KGLHD

KGLHD

Library Cache Object - Parent


KGLNA

KGLHD

SELECT SUM (c2) FROM t1


WHERE c3 = 42 AND c4 < 2004
KGLOB
Parent
Handle

Parent
Object
Heap 0
X$KGLOB

Child 1
16 x 1 word
pointers

2005 Julian Dyke

STOP

Parent
Name

Child 2

Child
Handle
KGLHD

KGLHD

Library Cache Object - Child


KGLHD

Child
Object

Subheap
Header

Statistics
etc

KGLOB
Heap 0

Heap 6

Child
Handle

Subquery
Header
X$KGLOB

2005 Julian Dyke

STOP

Subheap
Header

SELECT
Statement

Library Cache - Statement


Subquery
Header

Explain
Plan

Operation

SORT
(AGGREGATE)

Explain
Plan

Operation

TABLE ACCESS (BY


INDEX ROWID)

Explain
Plan

Operation

INDEX
(RANGE SCAN)

2005 Julian Dyke

STOP

Sort (Aggregate)
Output
Columns

SORT (AGGREGATE)
Expression
Function Expression
Op=SUM
Expression
Column Expression
Variable
Column Definition
Obj =1234
Col=2

2005 Julian Dyke

STOP

Column Alias
Alias=C2

Table Access (By Index Rowid)


Output
Columns

TABLE ACCESS (BY INDEX ROWID)


ROWID
Expression Expression
Variable

Column Definition
Obj =1234
Col=2

Column Expression

Condition
Expression

Variable

Column Definition
Obj =1234
Col=ROWID

Predicate
c4 < 2004

Function Expression
Op=LT

Table Alias
Alias=T1

Expression

Column Expression

Expression
Constant Expression

Variable
Column Definition
Obj =1234
Col=4

2005 Julian Dyke

STOP

Constant
Value=2004
Column Alias
Alias=C4

Index (Range Scan)


Output
Columns

Predicate
c3 = 42

INDEX (RANGE SCAN)


Variable

Expression Array

Column Definition
Obj =1234
Col=ROWID

Expression
Function Expression
Op=EQ
Expression

Column Expression

Expression
Constant Expression

Variable
Column Definition
Obj =1234
Col=3

2005 Julian Dyke

STOP

Constant
Value=42
Column Alias
Alias=C3

Shared Pool Reserved Area

Area of memory reserved for large contiguous requests for


memory
Reduces fragmentation in shared pool
Only used if no space available in shared pool
Summarised in V$SHARED_POOL_RESERVED

SHARED_POOL_RESERVED_SIZE
specifies size of shared pool in bytes
defaults to 5% of SHARED_POOL_SIZE

_SHARED_POOL_RESERVED_PCT
specifies percentage of shared pool to reserve
defaults to 5%

_SHARED_POOL_RESERVED_MIN_ALLOC
specifies minimum chunk size e.g. 4400

2005 Julian Dyke

X$KSMSPR

Externalises address, size and class of all chunks in the


shared pool
Comment
ADDR

RAW(4)

INDX

NUMBER

INST_ID

NUMBER

KSMCHCOM

VARCHAR2(16)

KSMCHPTR

RAW(4)

KSMCHSIZ

NUMBER

KSMCHCLS

VARCHAR2(8)

KSMCHTYP

NUMBER

KSMCHPAR

RAW(4)

2005 Julian Dyke

free memory
reserved_stopper

Address
Size in bytes
Class
R-free
R-freeable

Shared Pool Reserved Area


SELECT ksmchcom,ksmchptr,ksmchsiz,ksmchcls
FROM x$ksmspr
ORDER BY ksmchptr;

56800000

KSMCHCOM

KSMCHPTR

reserved_stopper

56400024

free memory

56400038

reserved_stopper

5641EFEC

20 R-freeable

reserved_stopper

56800024

20 R-freeable

free memory

56800038

reserved_stopper

5681EFEC

20 R-freeable

reserved_stopper

56C00024

20 R-freeable

free memory

56C00038

reserved_stopper

56C1EFEC

20 R-freeable

reserved_stopper

57000024

20 R-freeable

2005 Julian Dyke

STOP

56400000

KSMCHSIZ KSMCHCLS
20 R-freeable

56C00000
57000000

126900 R-free

126900 R-free

126900 R-free

57400000
57800000
57C00000
58000000

Log Buffer
Guard Page

58400000

LOG_BUFFER = 524288

2 x 4K guard pages (DEADFACE)

1288 x 512 byte blocks for redo

Each 512 byte includes 16 byte header

Usable redo = 1288 x 496 = 638848 bytes


Header - 16 bytes
Body - 496 bytes

584A2000

Guard Page

2005 Julian Dyke

STOP

Thank you for your interest


For more information and to provide feedback
please contact me
My e-mail address is:
info@juliandyke.com
My website address is:
www.juliandyke.com

2005 Julian Dyke

You might also like