본문 바로가기

성능고도화54

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 최소화 원리 - 07.PL/SQL 함수의 특징과 성능부하 (1) PL/SQL함수의 특징 오라클은 PL/SQL로 작성된 함수/프로시저의 이식성을 고려해 오라클 서버가 아닌 Oracle Forms, Oracle Reports 같은 제품에서도 수행될 수 있도록 설계하였습니다. 그래서 PL/SQL로 작성한 함수와 프로시저를 컴파일하면 JAVA언어처럼 바이트코드가 생성되며, 이를 해석하고 실행할 수 있는 PL/SQL엔진만 있다면 어디서든 실행될 수 있습니다. 바이트코드는 데이터 딕셔너리에 저장되었다가 런타임 시 해석됩니다. 지금은 가장 인기 있는 개발언어가 된 JAVA가 초기에 고전했던 이유는 바로 속도 때문이었는데, PL/SQL도 JAVA처럼 인터프리터 언어기 때문에 Native 코드로 완전 컴파일된 내장 함수에 비해 많이 느립니다. 이 문제를 극복하려고 오라클 9i.. 2020. 2. 3.