DB 성능의 핵심

서재환·2022년 11월 7일
0

DB

목록 보기
13/13

DB

DB 성능을 향상시키기 위해선 데이터베이스로(랜덤 I/O)의 접근을 줄이고 최대한 메모리에 올라온 데이터로 로직을 수행시켜야 한다.

Write Ahead Log

디스크의 데이터에 접근 할 때 랜덤 I/O 와 순차 I/O로 구분할 수 있다. 대부분 랜덤 I/O가 발생한다. 그런데 성능 향상을 위해 바로 디스크에 접근하게 하지 않고 메모리에 순차적으로 쌓아 일정 양이 차면 한 번에 디스크에 접근 하여 일괄 적용시키는 기술이다. 메모리에 올라가 있는 데이터가 유실될 수 있기 때문에 Write Ahead Log 기술 을 통해 순차적으로 쿼리를 기록한다. 데이터의 무결성을 지킬 수 있다. 무결성 이란 데이터의 정확성, 일관성, 유효성이 유지되는 것을 일컫는다.

인덱스

인덱스는 정렬된 자료구조, 이를 통해 탐색 범위를 최소화한다.

인덱스에 적합한 자료구조

  • HashMap
    단건 검색 속도 O(1)
    범위 탐색은 O(N)
    전방 일치 탐색 불가 like 'AB%'

  • List
    정렬되지 않은 리스트 탐색 O(N)
    정렬된 리스트 탐색 O(logN)
    정렬되지 않은 리스트의 정렬 시간 복잡도 O(N) ~ O(N*logN)
    삽입 / 삭제 비용이 매우 높음

  • Tree
    트리 높이에 따라 시간 복잡도가 결정
    트리 높이를 최소화 하는 것이 중요
    한쪽으로 노드가 치우치지 않도록 균형을 잡아주는 트리 사용
    ex) Red-Black Tree, B+Tree

  • B+Tree
    삽입/삭제시 항상 균형을 이룸
    하나의 노드가 여러 개의 자식 노드를 가질 수 있음
    리프노드에만 데이터 존재 -> 연속적인 데이터 접근 시 유리
    https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html

위 자료구조 중에서 B+Tree 자료구조를 사용한다. 빠르게 데이터를 조회할 수 있지만 쓰기에는 많은 비용이 들기 때문에 TRADE OFF가 발생한다.

클러스터 인덱스

  • 데이터 위치를 결정하는 키 값
  • MySQL의 PK는 클러스터 인덱스다.
  • MySQL에서 PK를 제외한 모든 인덱스는 PK를 가지고 있다.

0개의 댓글