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의 병렬성 제한 ⚠️
- 불규칙한 주소로 인해 특정 채널/다이에 집중
- 일부 채널은 대기 상태로 유휴 자원 발생
- 채널 간 로드 밸런싱 불균형
- SSD 내부 구조 이해 🏗️
- 컨트롤러 최적화 🧠
- 연속된 주소 패턴 감지로 Prefetch 버퍼 활용
- 예측 가능한 패턴에서 캐시 적중률 향상
- Write Amplification 차이 📈
- 순차 쓰기: 1:1 비율로 효율적
- 랜덤 쓰기: 가비지 컬렉션 유발로 30% 오버헤드
- 대역폭 활용도 📊
- 순차 I/O: 최대 대역폭 활용 (~3.5GB/s)
- 랜덤 I/O: 제한적 활용 (~500MB/s, 약 7배 차이)
- 병렬 처리 최적화 ⚡