CS/데이터베이스
트랜잭션 격리 수준(Transaction Isolation Levels)
koka
2025. 3. 21. 18:24
트랜잭션의 격리 수준
- 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 여부를 결정하는 것
- SERIALIZABLE
- REPEATABLE READ
- READ COMMITTED
- READ UNCOMMITED
SERIALIZABLE
- 가장 엄격한 격리 수준으로 트랜잭션을 순차적으로 진행한다.
- 여러 트랜잭션이 동일한 레코드에 동시 접근할 수 없다.
- 트랜잭션이 순차적으로 처리되어야 하므로 동시 처리 성능이 매우 떨어짐
REPEATABLE READ
- RDBMS는 변경 전의 레코드를 언두 공간에 백업해두기 때문에 변경전/ 후 데이터가 모두 존재 하므로, 여러버전의 데이터가 존재한다고 하여 이를 MVCC(Multi-Version Concurrency Control, 다중 버전 동시성 제어)
- MVCC를 이용해 한 트랜잭션 내에서 동일한 결과를 보장하지만, 새로운 레코드가 추가되는 경우에 부정합 생길 수 있는 방법
READ COMMITTED
- 커밋된 데이터만 조회할 수 있다.
- Phantom Read에 더해 Non-Repeatable Read(반복 읽기 불가능)문제까지 발생
READ UNCOMMITTED
- 커밋하지 않는 데이터 조차도 접근할 수 있는 격리 수준
- 다른 트랜잭션의 작업이 커밋 또는 롤백되지 않아도 즉시 보이게 된다.
격리수준 요약
- READ UNCOMMITTED는 부정합 문제가 지나치게 발생
- SERIALIZABLE은 동시성이 상당히 떨어진다.
- READ COMMITTED 또는 REPEATABLE READ를 사용하면 된다.