케이스윔의 개발 블로그

[DB] transaction의 Level of isolation 본문

Study

[DB] transaction의 Level of isolation

kswim 2018. 10. 5. 14:08

<Level of isolation>

데이터베이스에서는 각 transaction 의 속성을 정의하여 수행할 수 있는데 SET TRANSACTION ~ 으로 시작하는 명령어를 통해 새로운 트랜잭션을 시작할 수 있다.


기본적으로 4가지가 있다.

1. READ UNCOMMITED : 말 그대로 커밋하지 않은 트랜잭션까지도 읽는다. 현재 트랜잭션이 읽으려고 하는 시점에 다른 트랜잭션에서 해당 데이터를 수정하면 그 수정된 데이터를 읽을 수 있다. - read lock 이 필요없음

2. READ COMMITED : 커밋된 트랜잭션까지 읽겠다! 현재 트랜잭션이 읽으려고 하는데 다른 트랜잭션이 해당 데이터를 수정해도 해당 트랜잭션이 커밋을 안했다면 수정되지 않은 데이터를 읽어온다. statement level 의 read consistency를 가지고 있고 read, write가능 - read lock 이 필요하고 해당 lock 을 포함하는 트랜잭션이 끝나기 전에 푼다.

3. REPEATABLE READ: 현재 커밋된 데이터까지 읽어오고, 동일한 데이터는 여러번 접근해도 같음을 보장한다. 이름에서 유추할 수 있다.

 - read lock 이 필요하고 트랜잭션이 끝날 때 푼다(그때까지는 수정할 수 없음!)

4. SERIALIZABLE: repeatable read 이자 범위질의에 대해서도 동일함을 보장한다. 해당하는 레코드가 아니지만 범위에 있는 데이터도 건들 수 없다! - 읽고 쓸 때 lock 이 걸리는데 직렬화를 할 수 없을 경우에는 오류가 난다.


4가지를 모두 지원하는 데이터베이스도 있고 일부만을 제공하는 데이터베이스도 있다.

Comments