Logical I/O: Julian Dyke Independent Consultant
Logical I/O: Julian Dyke Independent Consultant
Julian Dyke
Independent Consultant
Web Version
1
Agenda
Introduction
Logical I/Os
Statistics
Conclusion
Logical I/Os
Current Reads
Current reads
Can be updated
Can be dirty
Consistent Reads
Consistent reads
Cannot be updated
Cannot be dirty
Can be
single
multi
Buffer Pools
Externalized in
V$BUFFER_POOL
V$BUFFER_POOL_STATISTICS
Based on X$KCBWBPD
X$KCBWBPD
RAW(4)
INDX
NUMBER
INST_ID
NUMBER
BP_NAME
VARCHAR2(20)
BP_ID
NUMBER
BP_BLKSZ
NUMBER
BP_GRANSZ
NUMBER
BP_BUFPERGRAN
NUMBER
BP_LO_SID
NUMBER
BP_HI_SID
NUMBER
BP_SET_CT
NUMBER
BP_SIZE
NUMBER
BP_STATE
NUMBER
BP_CURRGRANS
NUMBER
BP_TGTGRANS
NUMBER
BP_PREVGRANS
NUMBER
Hash Buckets
10
500
6000
64
1024
Hash Buckets
# hash chains
BH
BH
cache
buffers
chain
latch
BH
11
BH
Buffer Headers
12
X$BH
13
RAW(4)
INDX
NUMBER
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
DBARFIL
NUMBER
Block Number
DBABLK
NUMBER
OBJ
NUMBER
Object ID
BA
RAW(4)
Buffer Address
CR_SCN_BAS
NUMBER
Hash List
Replacement List
Tablespace#
Absolute File Number
Working Sets
14
LRU Lists
15
16
Cold
MAIN
AUX
Write
List
MAIN
AUX
Object
List
MAIN
AUX
Range
List
MAIN
AUX
17
Buffer
Header
Replacement List
Hot End
18
Head of
Cold End
Replacement List
Cold End
X$KCBWDS
19
Working Set ID
ADDR
RAW(4)
INDX
NUMBER
INST_ID
NUMBER
SET_ID
NUMBER
DBWR_NUM
NUMBER
BLK_SIZE
NUMBER
NXT_REPL
RAW(4)
PRV_REPL
RAW(4)
Number of buffers on
MAIN Replacement List
NXT_REPLAX
RAW(4)
PRV_REPLAX
RAW(4)
CNUM_REPL
RAW(4)
ANUM_REPL
RAW(4)
Insertion Point
COLD_HD
RAW(4)
HBMAX
NUMBER
Maximum number of
Hot Buffers
HBUFS
NUMBER
NXT_WRITE
RAW(4)
Number of buffers on
AUX Replacement List
Touch Count
20
Touch Count
21
22
Single-Block Reads
Head of
Hot End
92
71
42
34
92
71
72
34
92
45
72
34
52
42
45
33
72
87
11
71
52
42
45
33
72
11
66
71
52
42
45
33
11
49
66
71
52
42
45
11
3
0
3
4
0
2
4
2
4
1
2
1
4
0
2
1
0
1
2
Read Block 42
11
33
34
87
Get
Insert
Update
Move
Set
Gettouch
Insert
first
first
block
buffer
buffer
touch
buffer
available
available
count
71
42
at
atcount
contents
to
head
head
head
buffer
buffer
of
of cold
cold
from
end
for
of
on
from
end
hot
block
block
cold
cold
end42
71
42
34
end
end
to zero
23
STOP
Block
Number
Head of
Cold End
42
33
87
11
1
Touch
Count
Consistent Reads
Current Block
Head of
Hot End
40
Head of
Cold End
56
34
17
27
27
34
17
95
27
34
33
27
95
132
128
132
150
150
150
Insert
Get
Read
Apply
first
current
consistent
buffer
undo
available
to
at
version
rollback
head
version
buffer
of
ofcold
of
from cold
block
end
27 SCN
to
into
endbuffer
132
128
STOP
Consistent Block
17
27
24
Block
Number
System
Change
27
Number
128
132
150
85
33
95
Multi-Block Reads
DB_FILE_MULTIBLOCK_READ_COUNT = 4
Head of
Hot End
ReadBlock
Block7
28
5
6
Read
1
3
4
Insert
Read
Move
Move
Get
Read
Insert
Move
next
next
block
buffers
next
block
block
buffers
four
four
four
17
2
3
4
5
86available
at
to
available
to
to
at
blocks
blocks
head
cold
cold
cold
headend
end
of
end
of
into
into
Get
first
four
cold
buffers
buffers
coldend
end
from cold
cold end
end
from
25
STOP
Head of
Cold End
7
2
1
3
4
8
5
6
6
2
3
7
1
5
5
2
1
6
1
5
41
5
2
3
6
2
3
7
4
1
8
1
5
1
2
5
6
2
1
3
5
6
7
2
3
4
7
6
8
1
5
Dirty Blocks
26
DBWn process
scans from cold end of MAIN replacement list
moves dirty blocks to auxiliary list
writes dirty blocks back to disk
Buffer Pinning
27
28
29
Read Block 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Segment
Data
Empty
Block
Block
Header 3
1
2
Segment
Header
Data
Blocks
Empty
Blocks
19
20
12
13
15
4
2
23
22
18
21
10
16
17
11
14
1
3
5
6
7
8
9
1
5
9
12
13
15
19
20
10
16
17
11
14
4
2
22
23
18
21
8
3
6
7
6
16
17
10
12
1
2
4
5
9
18
15
13
14
11
3
7
8
10
12
2
3
4
5
9
16
17
13
14
11
1
6
7
8
18
15
1
20
36
40
48
12
16
24
28
32
52
56
44
8
64
68
4
72
60
10
12
9
13
14
11
6
7
8
16
17
1
2
3
4
5
18
15
Unused
Blocks
Table T1
High Water
Mark
30
STOP
31
In Oracle 9.2
segment header initially read 3 times
segment header read again every 10 extents
Unique Scan
SELECT c2 FROM t1 WHERE c1 = 42;
0
SELECT STATEMENT
1 0
TABLE ACCESS (BY INDEX ROWID) OF 'T1'
2 1
INDEX (UNIQUE SCAN) OF 'I1'
Read Table
Index Block 34
1
Data
Block
Branch
Leaf
Block
Block
Index I1
Table T1
32
STOP
2
1
3
3
1
2
3
1
2
2
1
1
1
1
Index I1
Branch
Block
Leaf
Blocks
33
STOP
2
1
1
2
2
1
1
Data Block
Table T1
Leaf
Blocks
34
STOP
1
1
1
1
1
1
Clustering Factor
35
Read Table
Index Block 22
23
6
10
14
18
1
Leaf Block
Data
Block
(Pinned)
Branch
Block
Index I2
Table T1
36
STOP
5
6
2
3
4
7
18
5
6
2
3
4
18
7
11
3
4
6
1
2
5
11
4
5
7
1
2
3
6
3
5
1
2
4
3
4
6
1
2
5
Read Table
Index Block 9
83
4
1
Leaf Block
Data
Block
(Pinned)
(Pinned)
Branch
Block
Index I3
Table T1
37
STOP
4
33
1
2
4
1
2
33
11
2
11
11
3
22
1
9
6
7
8
1
3
5
42
6
5
1
2
3
42
38
Bad
Clustering
Factor
Good
Clustering
Factor
consistent gets
Row Prefetching
39
Row Prefetching
Applies to
OCI
Pro*C
JDBC
PL/SQL
SQL*Plus
OCI_ATTR_PREFETCH_ROWS
Host Array
setRowPrefetch ()
BULK COLLECT
SET ARRAYSIZE
40
Row Prefetching
41
Consistent Gets
1003
518
337
276
227
10
130
20
82
50
53
100
43
250
37
500
35
1000
34
Consistent Gets
Prefetch Size
42