본문 바로가기
자격증/패스트 캠퍼스 데이터베이스와 SQLD 합격패스 Online

패스트 캠퍼스 챌린지 21일차 데이터베이스와 SQLD 합격패스 Online

by 리드민 2021. 9. 26.
반응형

Ch 06. 트랜잭션 - 02. 트랜잭션 처리의 필요성

Ch 06. 트랜잭션 - 03. 트랜잭션 격리 수준

[] ANSI 표준 격리 수준(Isolation level)

(1) ANSI 표준 격리 수준(직렬화 가능 기능으로 부터 격리 수준 완화)

격리 수준 설명
Read Uncommitted Commit 되지 않은 읽기
트랜잭션에서 처리 중인 아직 Commit 되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용
Read Committed Commit된 읽기
트랜잭션이 Commit 확정된 데이터만 다른 트랜잭션이 읽도록 허용
Repeatable Read 반복 읽기
트랜잭션 내에서 쿼리를 두 번 이상 수행할 때, 첫번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌는 현상을 방지
Serialzable 직렬화 가능
트랜잭션 내에서 쿼리를 두 번 이상 수행할 때, 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 바꾸지 않음은 물론 새로운 레코드가 나타나지도 않음

- 가장 이상적인 격리 수준의 보장은 Serailizable 임

- 하지만 Serializable 수준으로 DBMS 운영 시 동시성이 크게 떨어지면서 성능 상 이슈가 발생함

- 이러한 이유로 Serializable 보다 낮은 격리 수준으로 DBMS가 운영 됨
- 그로 인해 발생되는 다양한 문제가 존재함

 

[] 격리 수준 완화되면서 직렬화 가능에서 없었던 현상 발생

격리 수준 설명
Dirty Read Dirty 읽기
어떤 트랜잭션이 Commit되기 전 다른 트랜잭션에서 데이터 읽음
변경 후 아직 Commit되지 않은 값을 읽었는데 변경을 가한 트랜잭션이 최종적으로 롤백 된다면 그 값을 읽은 트랜잭션은 비 일관된 상태에 놓이게 됨
Non-Repeatable Read 애매한 읽기
어떤 트랜잭션이 이전에 읽은 데이터를 다시 읽어 들일 때 2회 이후의 결과가 1회 때와 다른 현상
한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상
Phantom Read 유령 읽기
어떤 트랜잭션을 읽을 때 선택할 수 있는 데이터가 나타나거나 사라지는 현상
한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유령(Phantom) 레코드가 두 번째 쿼리에서 나타나는 현상

[] 격리 수준과 3가지 현상의 관계

격리 수준 Dirty Read Non-Repeatable Read Phantom Read
Read Uncommitted 가능 가능 가능
Read Committed 불가능 가능 가능
Repeatable Read 불가능 불가능 가능
Serializable Read 불가능 불가능 불가능

 

반응형