반응형
트랜잭션 격리 수준이란 무엇일까?
각각의 트랜잭션이 동시에 작업을 처리할 때 어느정도 범위로 격리를 허용할 것 인지 결정하는 것.
격리수준 종류
Read uncommitted (level 0)
Read committed (level 1)
Repeatable read (level 2)
Serializable (level 3)
트랜잭션 격리수준에 따른 발생하는 이상현상
Dirty read : 트랜잭션이 작업이 완료되지 않았는데도 다른 트랜잭션에서 볼 수 있게 되는 현상
Non-repeatable read : 하나의 트랜잭션 내에서 데이터를 조회 시 서로 다른 데이터를 가져오는 현상Phantom read : 하나의 트랜잭션 내에서 없던 레코드가 생기거나 제거되는 현상
Dirty read | Non-repeatable read | Phantom read | |
Read uncommitted | O | O | O |
Read committed | X | O | O |
Repeatable read | X | X | O |
Serializable | X | X | X |
Read uncommitted (level 0)
- 각 트랜잭션에서의 변경 내용이 COMMIT이나 ROLLBACK 여부에 상관 없이 다른 트랜잭션에서 값을 읽을 수 있다. (emp_no 50000 을 커밋 전에 읽는 현상)
- 정합성에 문제가 많은 격리 수준이기 때문에 사용하지 않는 것을 권장한다.
Read committed (level 1)
- RDB에서 대부분 기본적으로 사용되고 있는 격리 수준이다.
- 실제 테이블 값을 가져오는 것이 아니라 Undo 영역에 백업된 레코드에서 값을 가져온다. (Lara를 읽어가는 부분)
Repeatable read (level 2)
- MySQL에서는 트랜잭션마다 트랜잭션 ID를 부여하여 트랜잭션 ID보다 작은 트랜잭션 번호에서 변경한 것만 읽게 된다.
- Undo 공간에 백업해두고 실제 레코드 값을 변경한다.
- 백업된 데이터는 불필요하다고 판단하는 시점에 주기적으로 삭제한다.
- Undo에 백업된 레코드가 많아지면 MySQL 서버의 처리 성능이 떨어질 수 있다.
- Mysql의 기본값
Serializable (level 3)
- 가장 단순한 격리 수준이지만 가장 엄격한 격리 수준
- 성능 측면에서는 동시 처리성능이 가장 낮다.
- SERIALIZABLE에서는 이상현상이 모두 발생하지 않는다.
- 엄격하지만 많은 트랜잭션을 처리하기에는 무거운 점이 있다.
참고 서적
반응형
'컴퓨터' 카테고리의 다른 글
mysql 언두 로그란 (update 시 일어나는 일) (0) | 2023.12.17 |
---|---|
intellij project view 경로 숨기고 branch만 표시하는 법 (0) | 2023.03.17 |
좌표계 변환 - proj4 [행정안전부 -> 카카오 좌표체계 변환] (0) | 2021.04.03 |