๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ”ฌapplication/- Database

[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] Isolation Level, ๊ณ ๋ฆฝ ์ˆ˜์ค€

by Wonit 2021. 4. 7.

Isolation Level, ๊ณ ๋ฆฝ ์ˆ˜์ค€์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Transaction, ํŠธ๋žœ์žญ์…˜ ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
๋งŒ์•ฝ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด์„œ ํ™•์‹คํ•˜๊ฒŒ ์ดํ•ด๋ฅผ ํ•˜์ง€ ๋ชป ํ–ˆ๋‹ค๋ฉด, ํ™•์ธํ•˜๊ณ  ์˜ค๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค!

 

Isolation Level, ๊ณ ๋ฆฝ ์ˆ˜์ค€

์ถœ์ฒ˜ : https://medium.com/@huynhquangthao

 

Isolation Level, ๊ณ ๋ฆฝ ์ˆ˜์ค€์€ ํŠธ๋žœ์žญ์…˜๋“ค ๋ผ๋ฆฌ ์ผ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ผ๋งˆ๋‚˜ ํ—ˆ์šฉํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ •ํ•˜๋Š” ์ˆ˜์ค€์ด๋‹ค.

 

๊ณ ๋ฆฝ ์ˆ˜์ค€์—๋Š” ์ด 4๊ฐ€์ง€์˜ ์ˆ˜์ค€, 3๋‹จ๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค (0๋‹จ๊ณ„ ๋ถ€ํ„ฐ ์‹œ์ž‘)

  1. Level 0 Read Uncommitted
  2. Level 1 Read Committed
  3. Level 2 Repeatable Read
  4. Level 3 Serializable

์ด๋Ÿฐ ๊ณ ๋ฆฝ ์ˆ˜์ค€์—๋Š” ๋‚˜๋ฆ„์˜ ํŠน์ง•์ด ์žˆ๋‹ค.

์ด์ œ ๊ฐ๊ฐ์˜ ์ˆ˜์ค€์— ๋”ฐ๋ผ์„œ ์•Œ์•„๋ณด์ž.

Isolation Level, ๊ณ ๋ฆฝ ๋ ˆ๋ฒจ

Level 0. Read Uncommitted

Read Uncommitted๋Š” Uncommitted ๋œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฒฐ๊ณผ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•˜์ง€๋งŒ ๋™์‹œ ๋™์‹œ์„ฑ์€ ํ–ฅ์ƒ๋œ๋‹ค.

transaction 1 ์ด ์ˆ˜ํ–‰ ์ค‘์— transaction 2 ๊ฐ€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, transaction1 ์€ ๋ณ€๊ฒฝ๋˜๊ธฐ ์ „์˜ ๊ฐ’์„ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ํ•œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ์ด๋ฅผ Dirty Read ๋ผ๊ณ  ํ•œ๋‹ค.

๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋Š” ์ด์ƒ ํ˜„์ƒ

  • Dirty Read : Uncommitted ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒฝ์šฐ
  • Non Repeatable Read : ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ 2๋ฒˆ ์‹คํ–‰ํ•  ๋•Œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ •/์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ
  • Phantom Read : ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ 2๋ฒˆ ์‹คํ–‰ํ•  ๋•Œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ

Level 1. Read Committed

Read Committed๋Š” ํŠธ๋žœ์žญ์…˜์ด ์ž‘์—…ํ•˜๋Š” ์‹œ์ ์— Lock์„ ๊ฑด๋‹ค.


์ด Lock ์„ ๊ฑฐ๋Š” ์ฃผ์ฒด๋Š” INSERT ๋‚˜ UPDATE ์™€ ๊ฐ™์€ ์ฒ˜๋ฆฌ ์„ธ์…˜์ธ๋ฐ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฟผ๋ฆฌํ•˜๋Š” ์„ธ์…˜(SELECT) ์€ INSERT๋‚˜ UPDATE๊ฐ€ ๋˜๊ธฐ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— Dirty Read ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ DBMS ์˜ ๊ธฐ๋ณธ์ ์ธ Isolation Level์ด๋‹ค. MySql ์€ ํ•ด๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค.

  • Lock ์„ ๊ฑฐ๋Š” ์ฃผ์ฒด : ์ฒ˜๋ฆฌํ•˜๋Š” ์„ธ์…˜ (INSERT, UPDATE)
  • ์ฟผ๋ฆฌํ•˜๋Š” ์„ธ์…˜(SELECT) ์ด ๋Œ€๊ธฐ

๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋Š” ์ด์ƒ ํ˜„์ƒ

  • Non Repeatable Read : ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ 2๋ฒˆ ์‹คํ–‰ํ•  ๋•Œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ •/์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ
  • Phantom Read : ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ 2๋ฒˆ ์‹คํ–‰ํ•  ๋•Œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ

Level 2. Repeatable Read

Repeatable Read๋Š” Read Committed ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŠธ๋žœ์žญ์…˜์ด ์ž‘์—…ํ•˜๋Š” ์‹œ์ ์— Lock์„ ๊ฑด๋‹ค.


ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ ์€ Lock์„ ๊ฑฐ๋Š” ์ฃผ์ฒด์ด๋‹ค.


Repeatable Read๋Š” ์ฟผ๋ฆฌํ•˜๋Š” ์„ธ์…˜์ด ๋ฝ์„ ๊ฑธ๊ธฐ ๋•Œ๋ฌธ์— Non Repeatable Read ๋ฅผ ํšŒํ”ผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

MySql ์˜ Default Isolation Level์ด๋‹ค.

  • Lock ์„ ๊ฑฐ๋Š” ์ฃผ์ฒด : ์ฟผ๋ฆฌํ•˜๋Š” ์„ธ์…˜ (SELECT)
  • ์ฒ˜๋ฆฌํ•˜๋Š” ์„ธ์…˜ (INSERT, UPDATE)์ด ๋Œ€๊ธฐ

์ด์ƒ ํ˜„์ƒ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

  • Phantom Read : ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ 2๋ฒˆ ์‹คํ–‰ํ•  ๋•Œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ

Level 3. Serializable

Serializable ๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์ง๋ ฌํ™” ์ „๋žต์ด๋‹ค. ๋ชจ๋“  ๋™์ž‘์ด ์ง๋ ฌํ™” ํ•˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.
์ตœ์ƒ์œ„ Isolation Level์ด๋‹ค.

๋ฐ์ดํ„ฐ์˜ ์•ˆ์ •์„ฑ์ด ๋งค์šฐ ์ค‘์š”ํ•œ ํŠน์ˆ˜ํ•œ ์ƒํ™ฉ์ด ์•„๋‹Œ ์ด์ƒ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ด์ƒํ˜„์ƒ

์—†๋‹ค.

Isolation Level ์ด ํ—ˆ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด์ƒ ํ˜„์ƒ

Isolation Level Dirty Read Non-Repeatable Read Phantom Read
Level 0, Read Uncommitted ํ—ˆ์šฉ ํ—ˆ์šฉ ํ—ˆ์šฉ
Level 1, Read Committed x ํ—ˆ์šฉ ํ—ˆ์šฉ
Level 2, Repeatable Read x x ํ—ˆ์šฉ
Level 3, Serializable x x x

๋Œ“๊ธ€