Database/SQLP

데이터 저장 구조 및 I/O Mechanism

Jinny zinny 2025. 6. 30. 20:29

데이터 저장 구조 및 I/O Mechanism

SQL이 느린 이유 = Disk I/O

I/O Call 속도는 Single Block I/O 기준으로 평균 10m/s

만약 I/O 튜닝이 안됐다면 프로세스에 의해 동시다발 적으로 발생하는 I/O Call로 디스크 경합과 대기시간이 증가한다.

데이터 베이스 저장 구조

  • 테이블 스페이스
    • 세그먼트(테이블)
      • 익스텐트
        • 여러개의 블록
    • 세그먼트(인덱스)
    • 세그먼트(파티션)
    • 세그먼트(LOB)

Sequential Access , Random Access

테이블 또는 인덱스 블록을 액세스하는 방식

Sequential Access

논리적 또는 물리적으로 연결된 순서에 따라 차례대로 블록을 읽는 방식

Random Access

논리적 물리적인 순서를 따르지 않고, 레코드 하나를 읽기 위해 한 블록씩 접근하는 방식

DB Buffer Cache

Disk I/O = SQL 성능

라이브러리 캐시 = SQL과 실행 계획 , DB 저장형 함수/프로시저 등을 캐싱 → 코드 캐시

DB 버퍼 캐시 = “데이터 캐시”

논리적 I/O, 물리적 I/O

논리적 블록 I/O : SQL을 처리하는 과정에 발생한 총 블록 I/O를 말한다.

물리적 블록 I/O: DIsk에서 발생한 총 블록 I/O를 말한다.

Direct Path Read 방식으로 읽는 경우 제외 시 모든 블록은 DB Buffer Cache를 경유해서 읽는다.

논리적 I/O 횟수는 일반적으로 DB Buffer Cache에서 블록을 읽은 횟수와 일치한다.

버퍼캐시 히트율

버퍼 캐시 효율을 측정하는데 전통적으로 가장 많이 사용해온 지표는 BCHR

(캐시에서 바로 찾은 블록 수/ 총 읽은 블록 수)*100

((논리적 I/O-물리적 I/O)/논리적 I/O )*100

Single Block I/O VS Multi Block I/O

캐시에서 찾지 못한 데이터 블록은 I/O Call을 통해 디스크에서 DB 버퍼 캐시로 적재하고서 읽는다.

I/O Call 할 때, 한번에 한 블록씩 요청하기도 하고, 여러 블록씩 요청하기도 한다.

  • Single Block I/O : 한 번에 한 블록씩 요청해서 메모리에 적재하는 방식
  • Multi Block I/O : 한 번에 여러 블록씩 요청해서 메모리에 적재하는 방식

Single Block I/O 대상 Operation

  • 인덱스 루트 블록을 읽을 때
  • 인덱스 루트 블록에서 얻은 주소 정보로 브랜치 블록을 읽을 때
  • 인덱스 브랜치 블록에서 얻은 주소 정보로 리프 블록을 읽을 때
  • 인덱스 리프 블록에서 얻은 주소 정보로 테이블 블록을 읽을 때

오라클의 Multi Block Size는 db_file_multiblock_read_count 파라미터로 정한다.

Table Full Scan VS Index Range Scan

Table Full scan : 테이블에 속한 블록 ‘전체’를 읽어서 사용자가 원하는 데이터를 찾는 방식

Index Range Scan :

  • Table Full Scan : Sequential Access + MultiBlock I/O로 디스크 블록을 읽는다.
  • Index Range Scan : Random Access + Single block I/O로 디스크 블록을 읽는다.
반응형