목차
트랜잭션 격리수준이란
트랜잭션 격리 수준이란 동시에 여러개의 트랜잭션 처리를 할 때 트랜잭션끼리 얼마나 고립되어 있는지를 나타낸다.
여러개의 트랜잭션이공유 자원
에 접근해 작업(CRUD) 을 할때자원의 일관성
을 지키기 위해 트랜잭션 작업을 얼마나 고립시킬지를 나타낸다.
- Read Uncommited
- Dirty Read 문제가 발생
- Read Commited
- Non-Repeatable Read 문제가 발생
- Repeatable Head
- Phantom Read 문제가 발생
- Serializable
격리 수준에 따른 문제
Dirty Read | Non-Repeatable Read | Phantom Read | |
---|---|---|---|
Read Uncommited | 발생 | 발생 | 발생 |
Read Commited | 발생하지 않음 | 발생 | 발생 |
Repeatable Raead | 발생하지 않음 | 발생하지 않음 | 발생 |
Serializable | 발생하지 않음 | 발생하지 않음 | 발생하지 않음 |
Read Uncommited
현재 트랜잭션에서 일어난 변경 사항이
Commit
이나Rollback
되지 않아도 다른 트랜잭션에서 변경된 값을 읽을 수 있다.
Dirty Read
현상이 발생- Commit 이 일어나기 전에 발생한 변경사항을 다른 Transaction 에서 조회할 수 있는 현상
Read Commited
다른 트랜잭션에서 일어난 변경 사항이 Commit되지 않았으면
Undo 영역
에 저장된 데이터를 읽어온다.
- Dirty Read가 발생하지 않는다.
Non-Repeatable Read
현상이 발생한다.- 한 트랜잭션 내에서 같은 데이터를 두번 조회 했을 때 이전 데이터와 일치 하지 않는 데이터 불일치 현상
Repeatable Read
트랜잭션 ID 를 이용해 현재 트랜잭션보다 이전에 일어난 변경사항 만 조회할 수 있다.
즉, 트랜잭션 내에서 조회한 데이터는 트랜잭션 종료 시점 까지 같은 데이터를 반환한다.
Phantom Read 가 발생한다.
- 한 트랜잭션 내에서 같은 데이터를 두번 조회 했을 때 이전에 존재하지 않았던 값이 다시 조회했을 때 나타나는 현상
- 트랜잭션 도중에데이터 삽입(Insert)
을 허용하기 때문에 발생하는 문제- REPETABLE READ 이하에서만 발생한다
Serializable
가장 높은 격리 수준, 읽기 작업에도 Lock이 걸리게 된다.
- 데이터를 조회할때
Shared Lock
을 획득해야만 조회할 수 있다. - 데이터를 변경할때는
Exclusive Lock
을 획득해야만 변경할 수 있다.