12-11-Real-MySQL¶
Real MySQL 8.0 1 - 아키텍처
데이터 페이지¶
MySQL이 데이터를 저장하는 단위(기본 16KB)
| 방식 | 설명 |
|---|---|
| 한 줄씩 읽기 | 디스크 왔다갔다 많음, 느림 |
| 페이지 단위로 읽기 | 한 번에 뭉텅이로, 빠름 |
세마포어¶
동시에 몇 명까지 들어갈 수 있는지 정하는 카운터
세마포어 = 3 (남은 자리)
A 입장 → 세마포어 = 2
B 입장 → 세마포어 = 1
C 입장 → 세마포어 = 0
D 입장 시도 → 대기! (0이라서)
A 퇴장 → 세마포어 = 1
D 입장 → 세마포어 = 0
MySQL에서 여러 스레드가 자원을 접근할 때 조절하는 방법
| 개념 | 설명 | 예시 |
|---|---|---|
| 뮤텍스 | 1개만 접근 가능 (0 또는 1) | 한 스레드만 접근해야 할 때(동기) |
| 세마포어 | N개까지 접근 가능 (카운터) | 여러 스레드가 제한적으로 접근할 때 |
- 예: 버퍼풀 수정할 때 여러 스레드가 동시에 건드리면 데이터 꼬임 → 뮤텍스로 보호
InnoDB vs MyISAM¶
| InnoDB | MyISAM | |
|---|---|---|
| 트랜잭션 | O | X |
| 외래키 | O | X |
| 락 단위 | 행(Row) | 테이블 |
| 복구 | 크래시 복구 가능 | 불안정 |
| 현재 | 기본 엔진 | 레거시 |
- InnoDB: 행 단위 락 -> 동시성 좋음
- MyISAM: 테이블 락 -> 1개씩 순서대로