πŸ“– [Theory] πŸ’» Transaction isolation level νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€

πŸ’» Transaction isolation level

μ•ˆλ…•ν•˜μ„Έμš”. πŸ‘‹

μ˜€λŠ˜μ€ νŠΈλžœμž­μ…˜ κ²©λ¦¬μˆ˜μ€€ ( Transaction isolation level ) 에 λŒ€ν•΄

μ•Œμ•„λ³΄λ €κ³  ν•©λ‹ˆλ‹€.

What is Transaction isolation level? (νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€μ΄λž€?)

νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€μ΄λž€ μ—¬λŸ¬ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— μˆ˜ν–‰μ΄ 될 λ•Œ 

νŠΉμ • νŠΈλžœμž­μ…˜μ΄ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ λ³€κ²½ν•˜κ±°λ‚˜ μ‘°νšŒν•œ 데이터λ₯Ό 

λ³Ό 수 μžˆλ„λ‘ ν—ˆμš© μ—¬λΆ€λ₯Ό κ²°μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€μ˜ ν•„μš”μ„±?

  • νŠΈλžœμž­μ…˜μ€ ACID νŠΉμ„±μ„ 가짐
  • νŠΈλžœμž­μ…˜μ΄ μ›μžμ μ΄λ©΄μ„œλ„ 독립적인 μˆ˜ν–‰μ„ 해야함
  • νŠΈλžœμž­μ…˜μ΄ μˆ˜ν–‰λ˜λŠ” λ™μ•ˆ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ κ΄€μ—¬ν•˜μ§€ λͺ»ν•˜κ²Œ λ§‰λŠ” Locking 이 λ“±μž₯함
  • 무쑰건적인 Locking은 λ™μ‹œμ— λ§Žμ€ νŠΈλžœμž­μ…˜μ„ μ²˜λ¦¬ν•  λ•Œ DB μ„±λŠ₯이 떨어짐
  • 효울적인 Locking 방법이 ν•„μš”ν•¨

νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€μ˜ μ’…λ₯˜

level 0 - READ UNCOMMITTED

UNCOMMITTED

νŠΈλžœμž­μ…˜ Aκ°€ νŠΉμ • 컬럼 데이터λ₯Ό λ³€κ²½ν•˜κ³  μžˆλŠ” 쀑에 (COMMIT은 아직 λ˜μ§€ μ•ŠμŒ)
νŠΈλžœμž­μ…˜ Bκ°€ readν•˜λ©΄ νŠΈλžœμž­μ…˜ Aκ°€ λ³€κ²½ν•˜κΈ° μ „ 데이터λ₯Ό μ½μ–΄μ˜¨λ‹€.
λ§Œμ•½ νŠΈλžœμž­μ…˜ Aκ°€ 데이터 λ³€κ²½ ν›„ μ»€λ°‹ν•˜κ²Œ 되면 νŠΈλžœμž­μ…˜ BλŠ” λ³€κ²½λœ 데이터λ₯Ό μ½μ–΄μ˜¨λ‹€.

문제점

  • dirty read λ°œμƒ

    νŠΈλžœμž­μ…˜μ΄ μž‘μ—…μ΄ μ™„λ£Œλ˜μ§€ μ•Šμ•˜λŠ”λ°λ„ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ λ³Ό 수 있게 λ˜λŠ” ν˜„μƒ λ³€κ²½λ˜κ³  μžˆλŠ” 데이터λ₯Ό μ½μ—ˆλŠ”λ° νŠΈλžœμž­μ…˜μ— λ¬Έμ œκ°€ 생겨 ROLLBACK 이 λœλ‹€λ©΄ λ³€κ²½ μ „ λ°μ΄ν„°λ‘œ λŒμ•„κ°€κ²Œ 됨.

    μ΄λ•Œ λ³€κ²½λ˜κ³  있던 데이터λ₯Ό 읽은 것과 ROLLBACK으둜 인해 λ³€κ²½ μ „ λ°μ΄ν„°λ‘œ λŒμ•„κ°„ 것이 λΆˆμΌμΉ˜ν•¨.


level 1 - READ COMMITTED

COMMITTED

νŠΈλžœμž­μ…˜ Aκ°€ νŠΉμ • 컬럼 데이터λ₯Ό λ³€κ²½ν•˜κ³  μžˆλŠ” 쀑에(COMMIT μ „)
νŠΈλžœμž­μ…˜ Bκ°€ readν•˜λ©΄ νŠΈλžœμž­μ…˜ Aκ°€ λ³€κ²½ν•˜κΈ° μ „ 데이터(이전 COMMIT)λ₯Ό μ½μ–΄μ˜¨λ‹€.
λ§Œμ•½ νŠΈλžœμž­μ…˜ Aκ°€ 데이터 λ³€κ²½ ν›„ μ»€λ°‹ν•˜κ²Œ 되면 νŠΈλžœμž­μ…˜ BλŠ” λ³€κ²½λœ 데이터λ₯Ό μ½μ–΄μ˜¨λ‹€.

문제점

  • Non-repeatable Read λ°œμƒ

    νŠΈλžœμž­μ…˜ μ‹œμž‘ ν›„, 반볡적인 μ‘°νšŒμž‘μ—…μ—μ„œ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ 데이터가 λ³€κ²½λ˜λŠ” 경우, 쑰회 μ‹œ 데이터가 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” ν˜„μƒμ„ 말함.

    λ˜‘κ°™μ€ 데이터λ₯Ό λ‹€μ‹œ μ‘°νšŒν–ˆμ„λ•Œ μΌμΉ˜ν•˜μ§€κ°€ μ•Šμ„μˆ˜ 있음.


level 2 - REPEATABLE READ

REPEATABLE READ

νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ 데이터λ₯Ό λ³€κ²½ 및 μ»€λ°‹ν–ˆλ”λΌλ„,
νŠΈλžœμž­μ…˜ μ‹œμž‘ μ‹œμ μ˜ 데이터λ₯Ό λ³΄μ—¬μ£ΌλŠ” νŠΈλžœμ μ…˜ λ ˆλ²¨μž…λ‹ˆλ‹€.

문제점

  • Phantom Read λ°œμƒ

    Unrepeatable Read μ—μ„œλŠ” λ°μ΄ν„°μ˜ λ³€κ²½, μ‚­μ œ, μΆ”κ°€ μž‘μ—…μ΄ κ°€λŠ₯. 반면 Phantom Read λŠ” 데이터 μΆ”κ°€λ§Œ κ°€λŠ₯ν•˜λ‹€.

    μΆ”κ°€κ°€ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ—, νŠΈλžœμž­μ…˜ μ‹œμž‘ ν›„, 반볡적인 μ‘°νšŒμž‘μ—…μ—μ„œ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ 데이터가 μΆ”κ°€λ˜λŠ” 경우, 쑰회 μ‹œ 데이터가 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” ν•œ ν˜„μƒμ„ 말함.

    ν•œ νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ 같은 쿼리λ₯Ό 두 번 μˆ˜ν–‰ν–ˆλŠ”λ°, 첫 번째 μΏΌλ¦¬μ—μ„œ μ—†λ˜ 유령(Phantom) λ ˆμ½”λ“œκ°€ 두 번째 μΏΌλ¦¬μ—μ„œ λ‚˜νƒ€λ‚˜λŠ” ν˜„μƒμ„ 말함.


level 3 - SELIALIZABLE

κ°€μž₯ 높은 isolation level 이닀.
νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ SELECT λ¬Έμž₯이 μ‚¬μš©ν•˜λŠ” λͺ¨λ“  데이터에 Shared Lock이 κ±Έλ¦¬λ―€λ‘œ
λ‹€λ₯Έ μ‚¬μš©μžλŠ” ν•΄λ‹Ή 데이터에 λ³€κ²½, μ‚­μ œ, μΆ”κ°€ μž‘μ—… λͺ¨λ‘ ν•˜μ§€ λͺ»ν•¨.
μ™„λ²½ν•œ 일관성 제곡!

문제점

  • Lock이 μ μœ ν•˜κ³  μžˆμ–΄μ„œ DB의 μ„±λŠ₯이 μ €ν•˜λœλ‹€.

끝

table

νŠΈλžœμž­μ…˜μ˜ 격리 μˆ˜μ€€κ³Ό
ν•΄λ‹Ή 격리 μˆ˜μ€€λ§ˆλ‹€μ˜
λ¬Έμ œμ μ„ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€. πŸ™

Reference

https://lng1982.tistory.com/287

http://www.dbguide.net/db.db?cmd=view&boardUid=148216&boardConfigUid=9&boardIdx=138&boardStep=1

Written on May 11, 2020