메뉴 건너뛰기

bysql.net

4. Prefetch

2010.07.10 23:32

balto 조회 수:28434


- Prefetch : 테이블과 인덱스를 미리 읽어오는 기법

  (다른뜻 : 한번의 Fetch Call로 Array 크기 만큼 여러개 레코드를 가져오는 ‘Row Prefetch')

- 대부분 DBMS에서 디스크 블록을 미리 읽어오는 기법을 제공한다.

- Prefetch는 한번에 인접하지 않는 여러개의 Single Block I/O를 읽어오는 것으로, 인접한 블록을 읽는 Multiblock I/O와는 다르다.

- Prefetch는 I/O Call을 병렬 방식으로 동시에 여러 개 수행하는 방법으로 서로 다른 디스크 드라이브에 위치하면 성능이 높아진다.

- Prefetch 성공률은 CKPT 프로세스가 관리하며 성공률이 낮아지면 기능을 정지시킨다.

- (관찰) select * from big_emp를 실행시킨 후 결과

 select name, value from v$sysstat

 where name in ('physical reads cache prefetch',   'prefetched blocks aged out before use');

 NAME VALUE( 교재에서는 각각 51094, 38 )

 physical reads cache prefetch 11956

 prefetched blocks aged out before use 0

- Prefetch는 db file parallel read 대기 이벤트로 측정된다.


인덱스 Prefetch

- 오라클 7.2부터 사용한 기능으로 인덱스의 블록을 미리 읽는 방법이다.

- 사례 : 그림 참조

fig6-4.jpg


- ①②③④ 순으로 Index Range Scan을 한다면 2번 브랜치블록을 읽고 5번 리프블록을 읽을 때 6,7번을 미리 적재하는 것이 좋다.(Multiblock 블록 I/O도 같이 사용 가능)

- Index Full Scan의 경우 리프블록을 모두 Prefetch 하면 효율적이다.(이 경우 정상적인 Index Full Scan과 달리 리프 블록 바로 위의 인덱스 브랜치 블록들을 읽는 약간의 비효율 감수해야 한다.) 

- Index Prefetch 파라메터

  _index_prefetch_factor : 기본은 100, 값이 작을 수록 옵티마이저가 Prefetch를 선호

  _db_file_noncontig_mblock_read_count : Prefetch 최대 블록 수, 1 이면 Prefetch 정지.


테이블 Prefetch

- 테이블 Lookup Prefetch 또는 테이터 블록 Prefetch라고 한다. 오라클 7.2부터 사용한 기능으로 인덱스의 블록을 미리 읽는 방법이다.

- 사례 : 그림 참조

fig6-5.jpg    

                     

- ①②③④⑤⑥⑦ 순서로 읽을 경우, 5번을 읽고 13번 읽을 때 13,15,18을 미리 적재한다.

- 인덱스 클로스터 효과가 나쁠 때 효과적이다.

- 버퍼 pinning은 논리적 블록 요청 횟수를 감소시키고, 테이블 Prefetch는 디스크 I/O에 대한 디스크 I/O 대기 횟수를 감소시킨다.

- 테이블 Prefetch 파라메터

  _table_lookup_prefetch_size : 기본 값 40

  _table_lookup_prefetch_thresh : 기본 값 2

  _multi_join_key_table_lookup : 기본 값 TRUE

- DB2의 경우 4-11번까지를 모두 읽은 다음, 결과에 대한 rowid를 얻어서 테이블를 접근.

번호 제목 글쓴이 날짜 조회 수
67 Front Page file 운영자 2010.05.17 154865
» 4. Prefetch file balto 2010.07.10 28434
65 5. 오라클 Lock file 휘휘 2010.06.07 26365
64 2. DB 버퍼 캐시 file 휘휘 2010.05.24 21916
63 3. SQL 트레이스 file balto 2010.06.06 21175
62 1. 기본 아키텍처 [1] file 휘휘 2010.05.23 19899
61 2. 트랜잭션 수준 읽기 일관성 file 휘휘 2010.06.07 19567
60 5. Undo file 토시리 2010.05.31 18649
59 11. Shared Pool file 실천하자 2010.05.31 18511
58 9. Static vs. Dynamic SQL [1] balto 2010.07.04 18343
57 4. Array Processing 활용 file 휘휘 2010.07.05 18238
56 1 장. 오라클 아키텍처 운영자 2010.05.20 17842
55 5. Fetch Call 최소화 file 휘휘 2010.07.05 16839
54 9. ASH(Active Session History) 실천하자 2010.06.14 15606
53 2. SQL 처리과정 file 휘휘 2010.06.28 15340
52 3. 버퍼 Lock [1] 휘휘 2010.05.24 15225
51 1. Explain Plan 실천하자 2010.06.06 14663
50 6. 바인드 변수의 부작용과 해법 file 실천하자 2010.06.28 14662
49 8. PL/SQL 함수 호출 부하 해소 방안 토시리 2010.07.11 14023
48 7. Result 캐시 휘휘 2010.07.19 12969