본문 바로가기

전체보기/Database

[Database]Isolation level 파헤치기 - 서로 다른 isolation level을 가진 transaction들은 어떻게 동작할까?

이전 글에서 Isolation level이란 무엇인지

간단하게 설명하였습니다.

https://devonce.tistory.com/22

 

[Database]Transaction과 isolation level

Transaction이란? Transaction이란 데이터베이스에서 실행하는 작업의 단위를 의미합니다. 이번 글에서는 송금하는 과정을 예제로 전체적인 개념들을 설명하고자 합니다. 또한 테스트를 위해 MySQL(InnoDB)을 활용..

devonce.tistory.com

 

하지만 해당 글의 예제에서는

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