Database
Which is best isolation level for a common situation
MySQL 트랜잭션 격리수준 선택 기준을 서비스 유형별로 정리합니다.
Which is best isolation level for a common situation
격리수준의 정답은 없습니다. "허용 가능한 이상현상"과 "필요한 처리량" 사이에서 선택해야 합니다.
격리수준 빠른 기준
READ COMMITTED: 대부분의 OLTP 기본 선택REPEATABLE READ: MySQL 기본값, 일관성 강화 필요 시SERIALIZABLE: 강한 정합성이 최우선인 좁은 구간READ UNCOMMITTED: 일반 서비스에는 비권장
선택할 때 보는 질문
- 더티 리드가 절대 허용 불가인가?
- 같은 트랜잭션에서 재조회 결과가 바뀌면 문제인가?
- 팬텀 리드를 애플리케이션이 처리할 수 있는가?
- 락 경합으로 인한 지연을 감당 가능한가?
실무 권장 패턴
- 전역 기본값은
READ COMMITTED또는 MySQL 기본 전략 유지 - 민감 트랜잭션만 상위 격리수준으로 승격
- 격리수준 변경 전 deadlock/latency 리허설 수행
- 낙관적 잠금(버전 컬럼)과 함께 사용 검토
결론
격리수준은 DB 파라미터가 아니라 비즈니스 정책입니다. 트랜잭션별로 필요 정합성을 분리해 설정하세요.