-
[DB] 트랜잭션 격리 수준 (Transaction isolation level)DB 2023. 10. 7. 19:38728x90
트랜잭션 격리 수준 이란 동시에 여러 트랜잭션이 수행될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하는 데이터를 조회 가능 여부를 결정하는 것입니다.
종류는 총 4가지로 Read uncommitted, Read committed, Repeatable read, Serializable이 있습니다.
Read uncommitted
한 트랜잭션에서 변경된 데이터를 Commit, Rollback 여부와 관계 없이 다른 트랜잭션에서 조회할 수 있는 Dirty read가 발생하고 데이터의 정합성과 일관성이 깨지게됩니다.
Read committed
실제 테이블의 데이터를 조회하는 것이 아닌 Undo 영역에 백업된 데이터를 조회합니다. 그로인해 Read uncommitted에서 발생하던 Commit되지 않은 트랜잭션에서 변경된 데이터를 조회하는 문제를 해결할 수 있습니다.
하지만 다른 트랜잭션이 Commit된 이후에 데이터를 다시 조회할 경우 상이한 결과값을 가져오는 Non-Repeatable read 문제가 발생할 수 있습니다.
Repeatable read
각 트랜잭션마다 고유한 ID값을 부여하여 자신의 ID보다 작은 ID 값을 가진 트랜잭션에서 변경된 데이터만 조회할 수 있도록합니다. 그로인해 Read committed 단계에서 발생하던 Non-Repeatable read의 문제를 해결할 수 있습니다.
하지만 다른 트랜잭션에서 처리된 변경 작업에 의해 데이터가 보였다가 안보이는 Phantom read 현상이 발생할 수 있습니다.
Serializeable
모든 작업을 하나의 트랜잭션으로 처리하는 것과 같은 가장 높은 격리 수준을 갖고 있습니다. 데이터를 안전하게 보호할 수 있지만 Deadlock이 발생할 수 있습니다.
728x90'DB' 카테고리의 다른 글
[DB] 클러스터링(Clustering) (0) 2024.01.21 [DB] 샤딩 (Sharding) (0) 2023.10.15 [DB] 인덱스(Index) (0) 2023.09.16 [DB] 데이터 시각화(Data Visualization)란? (0) 2020.08.30 [DB] 파티션 (Partition) (0) 2020.07.19