읽기 커밋은 다른 트랜잭션의 아직 커밋되지 않은 변경을 읽지 않도록 하는 격리 수준이다.
데이터베이스 내부 |
|---|
WAL · 체크포인트 · MVCC · 트랜잭션 격리 수준 · 읽기 커밋 |
데이터베이스 교착 상태 · 비관적 잠금 · 파티셔닝 · 시점 복구 · 데이터베이스 백업 |
원리
PostgreSQL의 일반 SELECT는 문장이 시작할 때의 스냅샷을 읽는다. 같은 트랜잭션이라도 다음 문장은 새로 커밋된 내용을 볼 수 있다.
예시
첫 조회에서 재고가 10이었더라도 다른 트랜잭션이 갱신하고 커밋하면 다음 조회에서는 9가 보일 수 있다.
데이터베이스 | |
|---|---|
관계형 | MySQL · PostgreSQL · MariaDB · SQLite |
NoSQL | |
스토리지 엔진 | |
주의할 점
한 번 읽은 값이 트랜잭션 내내 유지된다고 가정하면 안 된다. 읽고 판단한 뒤 쓰는 업무는 원자적 갱신, 명시적 잠금 또는 더 강한 격리가 필요한지 검토한다.