2025-08-28

오늘 배운 것

8.1 디스크 읽기 방식

  • 데이터 베이스의 성능 튜닝 목적 : 디스크 I/O 줄이기

8.1.1 하드 디스크 드라이브(HDD)와 솔리드 스테이트 드라이브(SSD)

  • 하드 디스크 : 기계식 디스크 장치로 데이터베이스 서버에서 병목 원인
  • SSD : 기존 하드 디스크 드라이브에서 데이터 저장용 플래터(원판)를 제거하고 그 대신 플레시 메모리를 장착
    • 디스크 원판을 기계적으로 회전시킬 필요가 없으므로 아주 빨리 데이터를 읽고 쓸 수 있음
    • 플래시 메모리는 전원이 공급되지 않아도 데이터가 삭제되지 않음
    • 컴퓨터 메모리(DRAM)보다는 느리지만 기계식 하드 디스크 드라이브보다는 훨씬 빠름
  • 순차 I/O에서는 HDD나 SSD나 성능이 비슷하지만 랜덤 I/O는 SSD가 훨씬 빠름
    • DBMS는 랜덤 I/O의 작업이 대부분이기 때문에 SSD는 DBMS용 스토리에 최적

8.1.2 랜덤 I/O와 순차 I/O

  • 순차 I/O : 디스크의 연속된 주소(블록)를 차례대로 읽고씀 → 한번에 크게 읽고 씀
  • 랜덤 I/O : 디스크 여기저기 흩어진 주소를 뛰어다니며 읽고 씀 → 단위가 작음
  • 디스크의 성능은 디스크 헤더의 위치 이동 없이 얼마나 많은 데이터를 한 번에 기록하느냐에 의해 결정
    • 따라서 여러번 쓰기 또는 읽기를 요청하는 랜덤 I/O 작업이 부하가 훨씬 더 큼
    • SSD는 디스크 헤더가 없어서 두 I/O 성능 차이가 없을 것 같지만 아님
      • 랜덤 I/O가 순차 I/O 보다 전체 처리량이 많아서 성능이 좋지 않음
  • 쿼리 튜닝의 목적 : 랜덤 I/O를 줄이기 위해 쿼리를 처리하는데 꼭필요한 데이터만 읽도로 쿼리 개선하는 것
  • OLTP : 다수 사용자의 짧은 트랜잭션을 ACID로 즉시 처리하는 시스템이고, 정규화+인덱싱+짧은 트랜잭션과 동시성 제어가 핵심이다.

8.2 인덱스란?

  • 인덱스 : 칼럼(또는 칼럼들)의 값과 해당 레코드가 저장된 주소를 키와 값의쌍으로 삼는 것
    • 칼럼의 값을 이용해 항상 정렬된 상태를 유지
    • 데이터의 저장 성능을 희생하고 그 대신 데이터의 읽기 속도를 높이는 기능
  • WHERE 조건절에 쓰이는 컬럼을 전부 인덱스로 생성하면 안되는 이유
    • 쓰기 비용 증가
      • INSERT/UPDATER/DELETE할 때마다 관련된 인덱스 전부 갱신해야됌
    • 인덱스의 저장공간 및 메모리 차지 비율 증가
      • 인덱스 증가 → 디스크 용량, 버퍼풀 메모리 증가 → 버퍼풀 히트율 감소 → 디스크 읽기 증가 → 전체 속도 감소
  • 인덱스 데이터 관리방식
    • B-Tree
      • 칼럼의 값을 변형하지 않고 원래의 값을 이용해 인덱싱하는 알고리즘
    • Hash
      • 칼럼의 값으로 해시값을 계산해서 인덱싱하는 알고리즘
      • 매우 빠른 검색을 지원
      • prefix 검색과 같은 값의 일부 검색이나 범위 검색할 때는 사용 불가
      • 메모리 기반의 데이터 베이스에서 많이 사용
  • 중복 허용 여부
    • 유니크 인덱스
      • 동등 조건 검색 시 옵티마이저에게 하나 찾으면 더이상 찾지 않아도 된다고 알려줄 수 있음
    • 비유니크 인덱스
  • 기능별 분류
    • 전문 검색용 인덱스
    • 공간 검색용 인덱스

results matching ""

    No results matching ""