본문 바로가기

스터디/오라클 성능고도화 원리와 해법141

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.
06.I/O 효율화 원리 - 01. 블록 단위 I/O I/O효율화를 달성하기 위해서는 쉽지 않은데다 장기간의 훈련이 필요합니다. I/O효율화 튜닝을 잘하려면 인덱스 원리, 조인 원리, 옵티마이저 원리에 대한 이해가 필수적입니다. 오라클을 포함한 모든 DBMS에서 I/O는 블록(block)단위로 이루어집니다. 블록 단위로 I/O한다는 것은, 하나의 레코드에서 하나의 컬럼만을 읽으려 할 때도, 레코드가 속한 블록 전체를 읽게 됨을 뜻합니다. 이는 데이터베이스 I/O성능과 튜닝원리를 이해하는데 매우 중요합니다. 하나의 블록을 액세스해 그 안에 저장돼 있는 모든 레코드를 순차적으로 읽는다면 설명 무거운 디스크 I/O를 수반하더라도 비효율은 없을 것입니다.(Sequential 액세스) 하지만 레코드 하나를 읽으려고 블록을 통째로 액세스한다면 그것은 메모리 버퍼에서 .. 2020. 2. 9.