(1) I/O 효율화 튜닝의 중요성
디스크를 경유한 입출력은 물리적으로 액세스 암이 움직이면서 헤드를 통해 데이터를 읽고 쓰기 때문에 느립니다. 반면 메모리를 통한 입출력은 전기적 신호에 불과하기 때문에 디스크 I/O에 비해 비교할 수 없을 정도로 빠릅니다.
그래서 모든 DBMS는 버퍼 캐시를 경유해 I/O를 수행합니다. 읽고자 하는 블록을 먼저 버퍼 캐시에서 찾아보고, 찾지 못할 때만 디스크에서 읽는 것을 말합니다.
결국, 디스크 I/O를 최소화하고 대부분 처리를 메모리에서 할 수 있도록 버퍼 캐시 효율성을 높이는 것이 데이터베이스 성능을 좌우하는 열쇠라고 할 수 있습니다.
(2)버퍼 캐시 히트율(Buffer Cache Hit Ratio)
버퍼 캐시 효율을 측정하는 지표로써 가장 많이 사용돼 온것이 버퍼 캐시 히트율입니다. 전체 읽은 블록 중에서 안만큼을 메모리 버퍼 캐시에서 찾았는지는 나타내는 것으로 공식은 아래와 같습니다.
BCHR은 물리적인 디스크 읽기를 수반하지 않고 곧바로 메모리에서 블록을 찾은 비율을 말합니다.
Direct Path Read방식으로 읽는 경우를 제외하면 모든 블록 읽기는 버퍼 캐시를 통해 이루어집니다.
BCHR을 구하는 공식을 통해 알 수 있는 것처럼 논리적 블록 읽기를 메모리 블록 읽기로 이해하기 보다 블록 요청횟수 또는 총 읽은 블록 수로 이해하는 것이 정확합니다.
모든 블록을 메모리를 경유해 읽기 때문에 결과적으로 같은 것일 수 있지만 '논리적'을 '메모리로부터로' 잘못 해석해 Call 통계를 잘못 해석하는 경우가 있으므로 의미를 명확히 하고자 합니다.
BCHR가 100%라고 하더라도 논리적으로 읽어야 할 블록 수의 절대량이 많다면 반드시 SQL 튜닝을 실시해서 논리적인 블록 읽기를 최소화 해야합니다. 대량의 데이터를 기준으로 NL 조인 방식을 사용해 작은 테이블을 반복적으로 Lookup하는 경우가 대표적입니다.
(3)네트워크,파일시스템 캐시가 I/O효율에 미치는 영향
메모리 I/O 디스크 I/O 뿐아니라 네트워크 속도가 I/O성능에 지대한 영향을 미치고 있습니다.
최근에는 데이터베이스 서버와 스토리지 간에 NAS 서버나 SAN을 통해 연결되는 아키텍쳐를 사용합니다. 따라서 I/O 성능 개선도 네트워크를 통한 전송량을 최소화하려는 쪽에 기술이 모아지고 있습니다.
오라클 RAC에서는 인스턴스끼리 네트워크를 통해 캐시된 블록들을 서로 공유하므로 메모리 I/O성능에도 네트워크 속도가 지대한 영향을 미치게 되었습니다. 기타비트 단위의 초고속 인터커넥트를 사용하지만 로컬 캐시에서 읽는 것보다 빠를 수는 없습니다.
결론적으로 디스크 속도가 문제이든, SAN이 문제이든 RAC 인터커넥트가 문제이든 I/O성능에 관한 가장 확실하고 근본적인 해결책은 논리적인 블록 요청 횟수를 최소화 하는 것에 있습니다.
'스터디 > 오라클 성능고도화 원리와 해법1' 카테고리의 다른 글
06.I/O 효율화 원리 - 04. Prefetch (0) | 2020.02.12 |
---|---|
06.I/O 효율화 원리 - 03. Single Block vs. Multiblock I/O (0) | 2020.02.11 |
06.I/O 효율화 원리 - 01. 블록 단위 I/O (0) | 2020.02.09 |
05.데이터베이스 Call 최소화 원리 - 08.PL/SQL 함수 호출 부하 해소 방안 (0) | 2020.02.05 |
05.데이터베이스 Call 최소화 원리 - 07.PL/SQL 함수의 특징과 성능부하 (0) | 2020.02.03 |
댓글