트랜잭션 격리 수준
트랙잭션 격리 수준
동시에 여러 트랜잭션이 실행될 때 한 트랜잭션이 다른 트랜잭션의 연산에 영향을 받지 않도록 하는 정도를 말한다.
낮은 격리 수준은 동시 처리 능력을 높이지만, 데이터의 일관성 문제를 발생시킬 수 있다.
높은 격리 수준은 데이터의 일관성을 보장하지만, 동시 처리 능력이 떨어질 수 있다.
즉, 데이터 정합성과 성능은 반비례한다.
개발자가 트랜잭션 격리 수준을 설정할 수 있는 기능을 제공하는 기능이다.
종류&특징
READ UNCOMMITTED
커밋이 되지 않은 트랜잭션의 데이터 변경 내용을 다른 트랜잭션이 조회하는 것을 허용Dirty Read, Phantom Read, Non-Repeatable Read
READ COMMITTED
커밋이 완료된 트랜잭션의 변경사항만 다른 트랜잭션에서 조회할 수 있도록 허용, 특정 트랜잭션이 이루어지는 동안, 다른 트랜잭션은 해당 데이터에 접근할 수 없다.Phantom Read, Non-Repeatable Read
REPEATABLE READ
한 트랜잭션에서 특정 레코드를 조회할 때 항상 같은 데이터를 응답하는 것을 보장한다.Phantom Read
SERIALIZABLE
특정 트랜잭션이 사용중인 테이블의 모든 행을 다른 트랜잭션이 접근할 수 없도록 잠근다. 가장 높은 데이터 정합성을 가지지만 성능이 가낭 낮다.
발생하는 문제
Dirty Read
한 트랜잭션이 다른 트랜잭션이 변경 중인 데이터를 읽는 경우
Phantom Read
한 트랜잭션이 동일한 쿼리를 두 번 실행했을 때, 두 번의 쿼리 사이에 다른 트랜잭션이 삽입, 갱신, 삭제 등의 작업을 수행하여 결과 집합이 달라지는 경우
Non-Repeatable Read
같은 트랜잭션 안에서 동일한 쿼리를 실행했을 때, 다른 결과를 얻는 경우
Leave a comment