본문 바로가기

스터디72

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.
05.데이터베이스 Call 최소화 원리 - 08.PL/SQL 함수 호출 부하 해소 방안 [해당 챕터는 예제가 많아서 1차정리 후 추후에 다시 정리하겠습니다] 사용자 정의 함수는 소량의 데이터 조회시에만 사용하는 것이 좋습니다. 대용량 데이터를 조회할 때는 부분범위처리가 가능한 상황에서 제한적으로 사용해야 하며, 될 수 있으면 조인 또는 스칼라 서브쿼리 형태로 변환하려는 노력이 필요합니다. 어쩔수 없이 함수를 쓸때는 호출 횟수를 최소화 할 수 있는 방법을 강구해야 합니다. 호출횟수를 최소화 할 수 있는 방법 (1)페이지 처리 또는 부분범위처리 활용 (2)Decode 함수 또는 Case문으로 변환 (3)뷰 머지(View Merge)방지를 통한 함수 호출 최소화 힌트에 NO_MERGE 사용하기, ROWNUM을 사용하기 (4)스칼라 서브쿼리의 캐싱효과를 이용한 함수 호출 최소화 스칼라 서브쿼리를 .. 2020. 2. 5.