Isolation Level::데이터베이스

2020. 6. 13. 19:33computer science/database

1. Isolation Level

 

 트랜잭션에서 일관성 없는 데이터를 허용하는 수준을 의미합니다.

 

 한 사용자가 어떠한 데이터를 수정하고 있는 경우 다른 사용자들이 그 데이터에 접근하는 것을 차단함으로써 완전한 데이터만을 사용자들에게 제공하게 됩니다.

 

 또한, 많은 사용자들의 수정 작업으로 인해 통계 자료를 작성할 수 없는 사용자를 위해 읽기 작업을 수행할 수 있도록 Isolation Level을 변경할 수 있습니다.

 

 

2. Transaction Isolation Level

 

RU(Read Uncommitted)

 SELECT 문장을 수행하는 경우 해당 데이터에 Shared Lock이 걸리지 않는 Level입니다.

 따라서, 어떤 사용자가 A라는 데이터를 B라는 데이터로 변경하는 동안 다른 사용자는 B라는 아직 완료되지 않은(Uncommitted 혹은 Dirty) 데이터 B를 읽을 수 있습니다.

 

UPDATE table SET col(data_A) = data_B WHERE ...

SELECT col(data_B) FROM table WHERE ...

가능

 

RC(Read Committed)

 SQL Server가 Default로 사용하는 Isolation Level입니다.

 이 Level에서는 SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸립니다.

 그러므로, 어떠한 사용자가 A라는 데이터를 B라는 데이터로 변경하는 동안 다른 사용자는 해당 데이터에 접근할 수 없습니다.

 

UPDATE table SET col(data_A) = data_B WHERE ...

SELECT col(data_B) FROM table WHERE ...

불가능

 

RR(Repeatable Read)

 트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리므로 다른 사용자는 그 영역에 해당되는 데이터에 대한 수정이 불가능합니다.

 하지만, 이 조건에 해당하는 Row를 INSERT 하는 것은 가능합니다. 따라서 동일 트랜잭션에서 Read 되는 데이터 수가 달라질 수 있습니다.

 

SELECT col(data_A) FROM table WHERE ...

UPDATE table SET col(data_A) = ... WHERE col(data_A) = 1 OR col(data_B) = 5;

불가능

 

SELECT col(data_A) FROM table WHERE ...

INSERT INTO table(col(data_A)) VALUES ...

가능

 

Serializable

 트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리므로 다른 사용자는 그 영역에 해당되는 데이터에 대한 수정 및 입력이 불가능합니다.

 RR의 경우 INSERT 데이터가 가능하였습니다. 하지만 이 Level에서는 INSERT 작업도 허용하지 않습니다.

 

SELECT col(data_A) FROM table WHERE ...

INSERT INTO table(col(data_A)) VALUES ...

불가능