[Oracle] I/O 효율화

당당·2024년 1월 13일
0

Oracle

목록 보기
45/51

📔설명

튜닝 주제는 다음과 같이 3가지가 있다.

  • 라이브러리 캐시 최적화
  • 콜 최소화
  • I/O 효율화

SQL을 빠르게 실행하기 위해선, I/O 발생량최소화하고, PGA사용량을 줄이는 것이다.


🍔인덱스 탐색 원리

오라클은 B*TREE를 사용한다.
Balanced로, 좌우 균형이 맞도록 한다.

또한 오라클의 인덱스도 테이블과 마찬가지로 블록 사용


✨블록 단위 I/O

블록
: 오라클이 디스크에 저장된 데이터를 메모리로 꺼내와야 하고, 그 때 사용하는 최소 단위

  • SQL의 성능을 좌우하는 것이 접근하는 블록의 개수 또는 접근 횟수

🎡시퀀셜 액세스와 랜덤 액세스

제일 윗 블록이 루트 블록, 그 아래가 브랜치, 제일 밑 블록이 리프 블록

랜덤 액세스(Random Access)
: 루트 블록->브랜치 블록->리프 블록, 리프 블록->테이블 블록의 접근

  • 비효율이 높은 액세스 방식
    (특정 블록에 접근하는데, 해당 블록의 데이터 중 한 건 만 필요로 하기 때문)
  • 인덱스 수직 탐색(루트->리프)의 경우도 필요한 데이터는 하나이고, 데이터 블록에서도 인덱스 한 건당 테이블 블록 한 건으로 매칭

시퀀셜 액세스(Sequential Access)
: 리프 블록->리프 블록

  • 최종 결과 집합으로 얼마만큼 선택되는지가 중요
  • 필요한 구간만큼만 스캔하도록 하고, 테이블로 접근한 데이터는 최대한 결과 집합으로 선택

🛒버퍼 피닝(Buffer Pinning)

버퍼 피닝
: 연속하여 같은 블록을 방문할 경우 해당 블록을 얻는 과정을 생략


👞싱글 블록 I/O와 멀티 블록 I/O

싱글 블록 I/O
: 한 번의 콜을 요청할 때 한 개의 블록만을 읽어 DB 버퍼 캐시에 적재

  • 인덱스를 이용한 스캔을 할 때

멀티 블록 I/O
: 한 번의 콜을 요청할 때 여러 블록을 읽어 DB 버퍼 캐시에 적재

  • 테이블 전체를 읽을 때

멀티 블록 I/O의 블록 개수를 결정하는 요소

  • 익스텐트가 가지는 블록의 개수
  • db_file_multiblock_read_count 파라미터

ex) 익스텐트 크기가 64KB, 블록 크기가 8KB라면, 8개의 연속된 블록을 가지도록 설정,
db_file_multiblock_read_count 값이 16이라면 멀티 I/O 블록 시 읽어들일 수 있는 블록 개수는 8개

profile
MySQL DBA 신입

0개의 댓글