Isolation and Lock

Transaction의 Isolation Level(隔離レベル)과 Lock에 대해서 살펴본다.

Isolation

Isolation level에 대해서 얘기할 때 다음의 3가지를 고려해야 한다. 기차표 좌석의 예매, 조회 등 동시에 Transaction이 발생할 경우를 예를 들어 설명한다.

구분 특징 설명
dirty reads
(read uncommitted)
① Time 10:00:00 : tranaction1이 cabin99좌석을 예매
② Time 10:00:02 : transaction2가 좌석수를 조회. 예매 가능좌석이 2자리
③ Time 10:00:03 : transaction1이 좌석예매를 취소
④ Time 10:00:04 : transaction2가 종료후에는 이미 잘못된 데이타를 갖고있게 됨
repeatable reads
(read consistency)
① Time 10:00:00 : transaction1이 명시적으로 transaction.begin()
② Time 10:00:01 : transactin1이 좌석수 조회. 결과 잔여석 2
③ Time 10:00:02 : transaction2가 좌석수를 2에서 으로 변경
④ Time 10:00:03 : transactin1이 좌석수 조회. 결과 잔여석 2
같은 transaction내에서 읽기 일관성이 유지되는 것을 말한다
phantom reads① Time 10:00:00 : transaction1이 명시적으로 transaction.begin()
② Time 10:00:01 : transactin1이 좌석수 조회. 결과 잔여석 2. cabin99 좌석예매가능
③ Time 10:00:02 : transaction2가 cabin99좌석 예매. Reservation table에 추가
④ Time 10:00:03 : transactin1이 좌석수 조회. 결과 잔여석 2. 하지만 cabin99 예매 불가
transaction1의 첫번째 조회에는 보이지 않았지만, 두번째 조회에는 보였으므로 Reservation table에 추가된 cabin99예매 데이타는 phantom data

Database Locks

Database는 여러가지 Locking mechanism을 사용하는데, 흔히 다음의 read lock, write lock, exclusive write lock, snapshot을 말한다.

구분특징설명
read locks읽기가 발생할 경우 다른 transaction의 쓰기를 금지한다.
그러므로 nonrepetable reads를 방지한다.
다른 transaction은 읽기는 가능하지만 역시 쓰기는 금지당한다.
현재 읽고 있는 transaction 역시 쓰기 금지한다.
write locks현재 traction의 update가 종료될때까지 다른 tranaction의 쓰기를 금지한다.
write lock은 현재 transaction을 포함해 다른 transaction의 dirty reads를 허용한다.
즉 현재 transaction의 commit되지 않은 data가 반영된다.
exclusive write locks현재 transaction의 쓰기가 종료될때까지 다른 transaction의 읽기,쓰기를 금지한다.
그러므로 다른 transaction에 의한 dirty reads를 방지할 수 있다.
어떤 vendor의 database는 자신의 data 읽기도 금지한다.
snapshotstransaction이 시작될때 저장된 frozen view이다.
snapshots은 dirty reads, nonrepeatable reads, phantom reads를 방지할 수 있지만, data가 real-time이 아니므로 주의해야 한다.

Transaction Isolation Levels

isolation leveldirty readsnonrepeatable readsphantom readsControlDescriptor Constant
Read Uncommitted 〇  〇  〇  TRANSACTION_READ_UNCOMMITTED
Read Committed ×  〇  〇  TRANSACTION_READ_COMMITTED
Repeatable Read ×  ×  〇  TRANSACTION_REPEATABLE_READ
Serializable ×  ×  ×  TRANSACTION_SERIALIZABLE

reference


QR Code
QR Code study:database:lock (generated for current page)