hi.log
로그인
hi.log
로그인
Transaction
David8
·
2023년 6월 14일
팔로우
0
transaction
0
DB
목록 보기
5/5
기본 내용
상호작용
dirty read
아직 commit 되지 않은 수정중인 데이터를 다른 트랜잭션에서
읽을 수
있도로 허용
non-repeatable read
한 트랜잭션에서 같은 쿼리를 두 번 수행할 때 그 사이에 다른 트랜잭션 값을
수정 또는 삭제
하면서 두쿼리의 결과가 상이하게 나타나는 일관성이 깨진 현상
phantom read
한 트랜잭션 안에서 일정 범위의 레코들 두 번 이상 읽었을 때, 첫번째 쿼리에서 없던 레코드가 두번째 쿼리에서 나타나는 현상
트랜잭션 도중 새로운 레코드
삽입
을 허용하기 때문에 나타남
isolation 수준
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
참조 링크
https://www.youtube.com/watch?v=sEBbYTDMBvA
READ UNCOMMITTED
각 트랜잭션에서 변경내용이 commit 이나 rollback 여부에 상관없이 다른 트랜잭션 값 읽을 수 있음
정합성에 문제가 많은 격리 수준이기 때문에 사용하지 않는 것 권장
문제점
dirty read 현상 발생
트랜잭션 작업이 완료 되지 않았는데 다른 트랜잭션에서 볼 수 있게 되는 현상
READ COMMITTED
rdb에서 대부분 기본적으로 사용하고 있는 격리 수준임
실제 테이블 값을 가져오는 것이 아니라 undo 영역에 백업된 레코드에서 값을 가져옴
undo 로그: update 또는 delete 같은 문장으로 데이터를 변경하였을 때 변경되기 전의 데이터를 보관하는 곳 --> 트랜잭션 롤백 대비, 트랜잭션의 격리 수준 유지
문제점
non-repeatable read
트랜잭션-1이 Commit한 이후 아직 끝나지 않는 트랜잭션-2가 다시 테이블 값을 읽으면 값이 변경됨
하나의 트랜잭션내에서 똑같은 SELECT 쿼리를 실행했을 때는 항상 같은 결과를 가져와야 하는 REPEATABLE READ의 정합성에 어긋남
REPEATABLE READ
MySQL에서는 트랜잭션마다 트랜잭션 ID를 부여하여 트랜잭션 ID보다 작은 트랜잭션 번호에서 변경한 것만 읽음
문제점
PHANTOM READ
삽입으로 인해 다른 트랜잭션에서 수행한 변경 작업에 의해 레코드가 보였다가 안 보였다가 하는 현상
SERIALIZABLE
한 트랜잭션에서 읽고 쓰는 레코드를 다른 트랜잭션에서 절대 접근 불가
가장 간단한 격리 수준이지만 가장 엄격한 격리 수준
성능 측면에서 동시 처리 성능이 가장 낮음
phantom read가 발생하지는 않지만 데이터베이스에서는 거의 사용 되지 않음
David8
팔로우
이전 포스트
window function
0개의 댓글
댓글 작성