-- SYS.X$KCBKPFS 정보
SQL> select * from X$KCBKPFS where PREFETCH_BLOCKS > 0;
ADDR INDX INST_ID BUFFER_POOL_ID TIMESTAMP PREFETCH_OPS PREFETCH_BLOCKS WASTED_BLOCKS CLIENTS_PREFETCH PREFETCH_LIMIT
---------------- ---------- ---------- -------------- ---------- ------------ --------------- ------------- ---------------- --------------
00007F5CB70ED540 100 1 3 6517084 53 312 0 1 5319
SQL> select name, value from v$sysstat
2 where name in ('physical reads cache prefetch','prefetched blocks aged out before use');
NAME VALUE
---------------------------------------------------------------- ----------
physical reads cache prefetch 8613
prefetched blocks aged out before use 0
WAIT #2: nam='db file scattered read' ela= 16809 file#=511 block#=46077 blocks=4 obj#=79955 tim=245420303473
WAIT #2: nam='*db file parallel read*' ela= 1166 file#=1 blocks=5 requests=5 obj#=79955 tim=245422093812
WAIT #2: nam='*db file parallel read*' ela= 14151 file#=1 blocks=2 requests=2 obj#=79955 tim=245429134621
WAIT #2: nam='db file scattered read' ela= 9371 file#=580 block#=45357 blocks=1 obj#=79955 tim=245440385315
WAIT #2: nam='*db file parallel read*' ela= 13349 file#=1 blocks=4 requests=4 obj#=79955 tim=245447176624
WAIT #2: nam='*db file parallel read*' ela= 13180 file#=1 blocks=4 requests=4 obj#=79955 tim=245454432524
1. ① -> ② -> ③ -> ④ 순으로 Index Range Scan을 진행
2. 2번 브랜치 블록을 읽고 5번 리프 블록을 읽으려는 시점에 5번 블록이 버퍼 캐시에 없으면 물리적인 디스크 I/O가 필요
3. 이때 6,7번 블록까지 같이 적재해 놓는다면, "④"번 작업 수행 시 리프 블록 스캔이 진행하는 동안 디스크 I/O때문에 대기할 가능성을 줄일 수 있음
Prefetch를 제어하는 파라미터
1. _index_prefetch_factor : 기본값은 100이며, 이 값을 더 작게 설정할수록 옵티마이저는 인덱스 Prefetch를 더 선호하게 됨
2. _db_file_noncontig_mblock_read_count : 한번에 최대 몇 개 블록을 Prefetch 할지를 지정함
1로 지정하면 Prefetch 기능이 정지 됨
1. ① -> ② -> ③ -> ④ -> ⑤ -> ⑥ -> ⑦순서로 진행된다.
2. 5번 인덱스 리프 블록을 읽고 12번 테이블 블록을 읽으려는 시점에 12번 블록이 버퍼 캐시에 없으면 물리적인 디스크 I/O가 필요함
이때, 13, 15, 18번 블록까지 같이 적재해 놓는 다면 ⑤,⑥,⑦번 액세스 시에 디스크 I/O 때문에 대기하지 않아도 됨
테이블 Prefetch를 제어하는 파라미터
1. _table_lookup_prefetrch_size : 기본 값은 40
2. _table_lookup_prefetch_thresh : 기본값은 2
3. _multi_join_key_table_lookup : 기본값은 TRUE