Transaction isolation level 종류 및 특징
- READ UNCOMMITTED (레벨 0)
- SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리는 계층
- 각 트랜잭션에서의 변경내용이 commit 이나 rollback 여부에 상관없이 다른 트랜잭션에서 값을 읽을 수 있다.
- Dirty Read 발생!
- 정합성에 문제가 많은 격리 수준이기 때문에 사용하지 않는 것을 권장
- READ COMMITTED (레벨 1)
- SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리지 않는 계층
- 트랜잭션이 수행되는 동안 다른 트랜잭션이 접근할 수 없어 대기하게 됨
- Commit이 이루어진 트랜잭션만 조회 가능
- Oracle, SQL Server에서 기본으로 사용
- Non-Repeatable Read 발생!
- Repeatable Read (레벨 2)
- 트랜잭션이 완료될 때까지 SELECT 문장이 사용되는 모든 데이터에 Shared Lock이 걸리는 계층
- 트랜잭션 범위 내에서 조회한 데이터 내용이 항상 동일함을 보장
- MySQL에서 기본으로 사용
- Phantom Read 발생!
- Serializable (레벨 3)
- 트랜잭션이 완료될 때까지 SELECT 문장이 사용되는 모든 데이터에 Shared Lock이 걸리는 계층
- 가장 엄격한 격리 수준으로 완벽한 읽기 일관성 모드를 제공함
- 다른 사용자는 트랜잭션 영역에 해당되는 데이터에 대한 수정 및 입력 불가능
* Dirty Read: 트랜잭션 작업이 완료되지 않았는데도 다른 트랜잭션에서 볼 수 있게 되는 현상
* Non-Repeatable Read: 한 트랜잭션에서 같은 쿼리를 두 번 수행할 때 그 사이에 다른 트랜잭션 값을 수정 또는 삭제하면서 두 쿼리의 결과가 상이하게 나타나는 일관성이 깨진 현상
* Phantom Read: 한 트랜잭션 안에서 일정 범위의 레코드를 두 번 이상 읽었을 때, 첫번째 쿼리에서 없던 레코드가 두번째 쿼리에서 나타나는 현상, 트랜잭션 도중 새로운 레코드 삽입을 허용하기 때문에 나타남
Isolation Level 선택 시 고려사항
- 동시성을 증가시키면 데이터 무결성에 문제가 발생하고, 데이터 무결성을 유지하면 동시성이 떨어지게 된다.
- 레벨을 높게 조정할 수록 발생하는 비용이 증가한다.
* 무결성(integrity): 데이터의 정확성, 일관성, 유효성이 유지되는 것
https://nesoy.github.io/articles/2019-05/Database-Transaction-isolation
공유 락과 배타 락
https://hudi.blog/mysql-8.0-shared-lock-and-exclusive-lock
MySQL 8.0의 공유 락(Shared Lock)과 배타 락(Exclusive Lock)
락의 종류와 전략은 DBMS 벤더사마다 조금씩 다르다. 본 포스팅은 MySQL 8.0 InnoDB 기준으로 설명한다. DBMS에서 특정 데이터에 대한 동시 접근이 발생한 경우 일관성과 무결성 지키기 위해 해당 데이
hudi.blog
'Development > 면접을 위한' 카테고리의 다른 글
[4월 16일] 오늘의 주제: 네트워크 (0) | 2023.04.18 |
---|