Blog
Anki
데이터베이스 이론

MySQL Isolation 별로 언제 Lock이 걸리고 어떤 Lock이 걸리나요?

답 보기
  • Lock은 인덱스 스캔시에 발생할 수 있음 락은 XLock이나 SLock을 명시적으로 거는 경우에 발생함(MVCC)
  • Repeatable Read에서는 Next Key Lock, Read Commited에서는 Record 락이 걸린다.
    • Shared Lock, Exclusive Lock 동일한듯

클러스터링 인덱스와 논클러스터링 인덱스의 차이점은 무엇인가요?

꼬리 질문
  • SSD 환경에서도 순차 I/O가 랜덤 I/O보다 빠른 이유는 무엇인가요?

답변 보기

✅ 클러스터링 인덱스는 데이터 페이지의 물리적 순서를 결정하는 인덱스이고, 논클러스터링 인덱스는 별도의 구조체로 데이터 위치를 가리키는 인덱스입니다.

  • 클러스터링 인덱스 🗂️

    • 데이터 페이지의 물리적 저장 순서를 결정
    • 테이블당 1개만 생성 가능 (Primary Key가 일반적)
    • 책의 페이지 번호와 같은 개념
    • 순차 I/O 패턴으로 높은 성능
  • 논클러스터링 인덱스 📋

    • 별도의 인덱스 구조체에서 데이터 페이지를 가리킴
    • 테이블당 여러 개 생성 가능
    • 책의 색인(Index)과 같은 개념
    • Key Lookup 과정에서 랜덤 I/O 발생 가능
  • HDD vs SSD 차이점 💾

    • HDD: 기계적 디스크 헤드 이동으로 순차 I/O가 압도적으로 유리
    • SSD: 기계적 움직임 없지만 여전히 순차 I/O가 2-3배 빠름
  • 꼬리질문: SSD 환경에서도 순차 I/O가 랜덤 I/O보다 빠른 이유는 무엇인가요?

    • 병렬 처리 최적화 ⚡
      • SSD 내부 구조 이해 🏗️
        • 채널(Channel): SSD 컨트롤러와 NAND 플래시 간의 독립적 데이터 통로 (일반적으로 4-8개)
        • 다이(Die): 각 채널 내의 독립적으로 작동하는 NAND 플래시 칩 (채널당 2-4개)
        • 플레인(Plane): 다이 내에서 병렬 처리가 가능한 단위 (다이당 2-4개)
      • 순차 I/O의 병렬 활용 🔄
        • 연속된 데이터를 여러 채널에 분산 저장 (Striping)
        • 예: 16KB 데이터 → 4개 채널에 각각 4KB씩 동시 처리
        • 모든 채널이 동시에 작업하여 총 처리량 4배 증가
      • 랜덤 I/O의 병렬성 제한 ⚠️
        • 불규칙한 주소로 인해 특정 채널/다이에 집중
        • 일부 채널은 대기 상태로 유휴 자원 발생
        • 채널 간 로드 밸런싱 불균형
    • 컨트롤러 최적화 🧠
      • 연속된 주소 패턴 감지로 Prefetch 버퍼 활용
      • 예측 가능한 패턴에서 캐시 적중률 향상
    • Write Amplification 차이 📈
      • 순차 쓰기: 1:1 비율로 효율적
      • 랜덤 쓰기: 가비지 컬렉션 유발로 30% 오버헤드
    • 대역폭 활용도 📊
      • 순차 I/O: 최대 대역폭 활용 (~3.5GB/s)
      • 랜덤 I/O: 제한적 활용 (~500MB/s, 약 7배 차이)