文書の過去の版を表示しています。
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 |