[Database]Isolation level 파헤치기 - 서로 다른 isolation level을 가진 transaction들은 어떻게 동작할까?
하지만 해당 글의 예제에서는
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 > mysql' 카테고리의 다른 글
MySQL 사용자 조회, 생성, 제거, 권한부여 (0) | 2024.09.20 |
---|---|
[MySQL] - 페이징 처리 ORDERS, OFFSET, LIMIT (0) | 2022.01.12 |
[MySQL] Delimiter 란? (0) | 2021.04.11 |
[Database]Transaction과 isolation level (0) | 2021.04.11 |
MySQL, 데이터형과 범위 (0) | 2020.11.05 |
MySQL 숫자형 int의 종류과 최대 허용범위 (0) | 2020.11.05 |
[MySQL] MySQL 마이그레이션 (0) | 2020.07.30 |
[MySQL] MySQL 로그 남기기 (0) | 2020.07.30 |