본문 바로가기

튜닝13

06.I/O 효율화 원리 - 05. Direct Path I/O 일반적인 블록 I/O는 DB버퍼 캐시를 경유합니다. 읽고자 하는 블록을 먼저 버퍼 캐시에서 찾아보고, 찾지 못할 때만 디스크에서 읽습니다. 데이터의 변경도 버퍼 캐시에 적재된 블록에서 이루어지며, DBWR 프로세스가 주기적으로 변경된 블록들(dirty 버퍼 블록)을 데이터파일에 기록합니다. 재사용 가능성이 없는 임시 세그먼트 블록들을 읽고 쓸 때도 버퍼 캐시를 경유할 경우 오히려 성능이 더 나빠질 수 있습니다. 오라클은 이럴 때 버퍼 캐시를 경유하지 않고 곧바로 데이터블록을 읽고 쓸 수 있는 Direct Path I/O 기능을 제공합니다. 아래는 이 기능이 작동하는 경우입니다. - Temp 세그먼트 블록들을 읽고 쓸 때 - 병렬 쿼리로 Full Scan을 수행할 때 - nocache 옵션을 지정한 LOB.. 2020. 2. 13.
06.I/O 효율화 원리 - 04. Prefetch 오라클에서 한번의 Fetch Call로 Array 크기만큼 여러 개 레코드를 가져오는 것을 ‘Row Prefetch’라고 설명합니다. 하지만 지금 설명하는 Prefetch는 테이블 prefetch와 인덱스 prefetch를 말합니다. 오라클을 포함한 모든 DBMS는 디스크 블록을 읽을 때 곧이어 읽을 가능성이 높은 블록을 미리 읽어오는 Prefetch 기능을 제공합니다. 디스크 I/O가 비용이 크기 때문에 한번의 I/O Call을 통해 다량의 블록을 퍼 올릴 수 있으면 그만큼 성능향상에 도움이 되기 때문입니다. 앞 절의 Multiblock I/O도 prefetch 기능 중하나라고 할 수 있습니다. 지금 설명할 prefetch와 다른점은 한 익스텐트에 속한 인접한 블록들을 Prefetch 한다는 점입니다... 2020. 2. 12.
06.I/O 효율화 원리 - 03. Single Block vs. Multiblock I/O I/O Call 수행원리에 대해서 살펴보겠습니다. Call통계를 보면 버퍼캐시에서 query + current 의 개수로 블록을 읽고, disk 항목으로 디스크에서 읽었다는 것을 확인할 수 있습니다. 만약 디스크에서 읽은 블록 개수가 64개라고 해서 I/O Call까지 64번 발생했음을 의미하지는 않습니다. 64번일 수도 있고, 그보다 작을 수도 있습니다. 읽고자 하는 블록을 버퍼 캐시에서 찾지 못했을 때, I/O 를 통해 데이터파일로부터 버퍼 캐시에 적재하는 방식에는 두가지 방식이 있습니다. Single Block I/O는 말 그대로 한번의 I/O Call에 하나의 데이터 블록만 읽어 메모리에 적재하는 것을 말합니다. 인덱스를 통해 테이블을 액세스 할 때는, 기본적으로 인덱스와 테이블 블록 모두 이 방.. 2020. 2. 11.
06.I/O 효율화 원리 - 02. Memory vs. Disk I/O (1) I/O 효율화 튜닝의 중요성 디스크를 경유한 입출력은 물리적으로 액세스 암이 움직이면서 헤드를 통해 데이터를 읽고 쓰기 때문에 느립니다. 반면 메모리를 통한 입출력은 전기적 신호에 불과하기 때문에 디스크 I/O에 비해 비교할 수 없을 정도로 빠릅니다. 그래서 모든 DBMS는 버퍼 캐시를 경유해 I/O를 수행합니다. 읽고자 하는 블록을 먼저 버퍼 캐시에서 찾아보고, 찾지 못할 때만 디스크에서 읽는 것을 말합니다. 결국, 디스크 I/O를 최소화하고 대부분 처리를 메모리에서 할 수 있도록 버퍼 캐시 효율성을 높이는 것이 데이터베이스 성능을 좌우하는 열쇠라고 할 수 있습니다. (2)버퍼 캐시 히트율(Buffer Cache Hit Ratio) 버퍼 캐시 효율을 측정하는 지표로써 가장 많이 사용돼 온것이 버.. 2020. 2. 9.