이전 글에서 Isolation level이란 무엇인지
간단하게 설명하였습니다.
https://devonce.tistory.com/22
하지만 해당 글의 예제에서는
transaction의 isolation level을
동일하게 설정하고 설명을 진행했습니다.
'그렇다면 서로 다른 isolation level을 가진 transaction들은 어떻게 동작할까?'
라는 의문이 들었고
이번 글에서는 이를 실험해 본 결과를 정리하려고 합니다.
참고로, 이번에는 MySQL이 아닌,
MSSQL을 이용하여 예제를 진행하였습니다.
처음에는 같은 isolation level(READ COMMITTED)의
두 transaction이 어떻게 동작하는지 먼저 살펴보겠습니다.
#write transaction
BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
INSERT INTO "dbo"."isolation_test" VALUES(0, GETDATE(), 100)
#read transaction
BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT * FROM "dbo"."isolation_test"
#결과 읽어오지 못함
예상했던 것처럼 commit하지 않은 데이터는
읽어오지 못했습니다.
이번에는 두 transaction의 isolation level을
다르게 설정해보겠습니다.
#write transaction
BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
INSERT INTO "dbo"."isolation_test" VALUES(0, GETDATE(), 100)
#read transaction
BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT * FROM "dbo"."isolation_test"
#결과 읽어오지 못함
write transaction의 isolation level은 READ UNCOMMITTED이지만
read transaction은 여전히 값을 읽어오지 못하고 있습니다.
이를 통해 isolation level의 기준은
(isolation level의 명칭에서('READ' COMMITTED) 유추해 낼 수 있는 내용일 수 있지만)
read(조회)를 수행하는 transaction에 있다는 것을 알 수 있었습니다.
이를 검증하기 위해
이번에는 반대로 isolation level을 설정하고
똑같은 동작을 수행해보겠습니다.
#write transaction
BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
INSERT INTO "dbo"."isolation_test" VALUES(0, GETDATE(), 100)
#read transaction
BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT * FROM "dbo"."isolation_test"
#결과 읽어오기 성공
+------+-------------------------+---------+
| id | createDatetime | value |
|------+-------------------------+---------|
| 0 | 2020-02-28 22:42:30.360 | 100 |
+------+-------------------------+---------+
우리가 예상했던 것처럼
문제없이 데이터를 읽어왔습니다.
잘못된 점이 있거나 궁금한 점이 있으면 댓글 부탁드립니다!
'전체보기 > Database' 카테고리의 다른 글
[MSSQL] DECIMAL 사칙연산 파헤치기 (0) | 2020.10.15 |
---|---|
[MSSQL] Collation 충돌 해결하기 (0) | 2020.06.13 |
[MSSQL] Collation 파헤치기 (1) | 2020.06.12 |
[MySQL] Delimiter 란? (0) | 2019.09.10 |
[Database]Transaction과 isolation level (0) | 2019.06.23 |