DB/RDBMS

Transaction Isolation 레벨

μ©μ‹œν‚΄ 2023. 1. 9. 19:41
728x90

νŠΈλžœμž­μ…˜ Isolationμ„€λͺ…에 ν•„μš”ν•œ μ—¬λŸ¬ μš©μ–΄λ₯Ό λ¨Όμ € μ •λ¦¬ν•˜μž.

Transaction

  • λ°μ΄ν„°μ˜ 정합성을 보μž₯ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯
  • db read, writeμž‘μ—…μ„ λ…Όλ¦¬μ μœΌλ‘œ λ¬ΆλŠ” 방식
  • νŠΈλžœμž­μ…˜μœΌλ‘œ 묢은 μž‘μ—…μ΄ μ„±κ³΅ν•˜λ©΄ commit, μ‹€νŒ¨ μ‹œ rollback을 ν•˜λ―€λ‘œ 뢀뢄성곡, λΆ€λΆ„ μ‹€νŒ¨(Partial Update)의 μœ„ν—˜μ΄ μ—†μŒ

Lock

  • λ™μ‹œμ„±μ„ μ œμ–΄ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯
  • μ—¬λŸ¬ 컀λ„₯μ…˜μ—μ„œ λ™μ‹œμ— λ™μΌν•œ μžμ›μ„ μš”μ²­ν•  경우 μˆœμ„œλŒ€λ‘œ ν•˜λ‚˜μ˜ 컀λ„₯μ…˜λ§Œ λ³€κ²½ν•  수 있게 ν•˜λŠ” μ—­ν• 

Isolation level

  • λ™μ‹œμ— ν•˜λ‚˜ λ˜λŠ” μ—¬λŸ¬ νŠΈλžœμž­μ…˜μ΄ μ§„ν–‰ λ λ•Œ, λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ λ³€κ²½λœ 데이터λ₯Ό μ‘°νšŒν•˜λŠ” κΈ°μ€€
  • 일반적인 μ„œλΉ„μŠ€μ—μ„œλŠ” Read Commited, Repeatable Readλ₯Ό μ‚¬μš©

Transaction Isolation

Read Commited

λŒ€λΆ€λΆ„μ˜ DBMSμ—μ„œμ˜ κΈ°λ³Έ μ„€μ •

  • μ»€λ°‹λœ λ°μ΄ν„°λ§Œ 읽음
  • dirty readκ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ 보μž₯
  • Non-Repeatable Read λ°œμƒ κ°€λŠ₯

Read Uncommited

  • postgresqlμ—μ„œ μ§€μ›ν•˜μ§€ μ•ŠμŒ
  • 각 νŠΈλžœμž­μ…˜μ—μ„œμ˜ λ³€κ²½ λ‚΄μš©μ΄ Commit, Rollback μ—¬λΆ€ 상관없이 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ— 쑰회됨
  • dirty read λ°œμƒ κ°€λŠ₯

Repeatable Read

  • Undo μ˜μ—­μ˜ λ°±μ—…λœ 데이터λ₯Ό μ΄μš©ν•΄ 동일 νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ 같은 κ²°κ³Ό 보μž₯
  • MySql의 InnoDB μ—μ„œ 기본으둜 μ‚¬μš©λ˜λŠ” 격리 μˆ˜μ€€
    • MVCC(Multi Version Concurrency Control)
      • InnoDBμŠ€ν† λ¦¬μ§€ 엔진은 νŠΈλžœμž­μ…˜μ΄ Rollback κ°€λŠ₯성에 λŒ€λΉ„ν•΄ λ³€κ²½ μ „ λ ˆμ½”λ“œλ₯Ό Undo 곡간에 λ°±μ—… ν›„ μ‹€μ œ λ ˆμ½”λ“œκ°’ λ³€κ²½
  • Read Commited도 Undoμ˜μ—­μ˜ λ°±μ—…λœ 데이터λ₯Ό λ³΄μ—¬μ£Όμ§€λ§Œ, λ‘˜μ˜ μ°¨μ΄λŠ” λ°±μ—…λœ 데이터 쀑 μ–΄λ–€ 이전 버전을 λ³΄μ—¬μ£ΌλŠ”μ§€ 차이가 μžˆλ‹€.

Serializable

  • κ°€μž₯ μ—„κ²©ν•œ 격리 μˆ˜μ€€
  • 읽기 μž‘μ—…λ„ 읽기 μž κΈˆμ„ νšλ“ν•΄μ•Ό ν•˜λ©°, λ™μ‹œμ— λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ€ ν•΄λ‹Ή λ ˆμ½”λ“œ λ³€κ²½ λΆˆκ°€

νŠΈλžœμž­μ…˜μ—μ„œ λ°œμƒ κ°€λŠ₯ν•œ λΆ€μ •ν•© ν˜„μƒ

Non-Repeatable Read

  • ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ select 쿼리λ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œ 항상 같은 κ²°κ³Όκ°€ λ‚˜μ˜€μ§€ μ•ŠλŠ” ν˜„μƒ
  • 격리 μˆ˜μ€€ μ„€μ • μ‹œ λ”°λΌμ˜€λŠ” λΆ€μ •ν•© λͺ©λ‘

Dirty Read

  • νŠΈλžœμž­μ…˜μ—μ„œ μ²˜λ¦¬ν•œ μž‘μ—…μ΄ μ™„λ£Œ(Commit, Rollback)λ˜μ§€ μ•Šμ•˜μ„ 경우 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ 데이터λ₯Ό μ½λŠ” ν˜„μƒ

Phantom Read(Phantom Row)

  • λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ μˆ˜ν–‰ν•œ λ³€κ²½ μž‘μ—…μ— μ˜ν•΄ λ ˆμ½”λ“œκ°€ λ³΄μ˜€λ‹€ μ•ˆ λ³΄μ˜€λ‹€ ν•˜λŠ” ν˜„μƒ
  • select ν•˜λŠ” λ ˆμ½”λ“œμ— μ“°κΈ° μž κΈˆμ„ κ±Έμ–΄μ•Ό ν•˜μ§€λ§Œ, Undoμ˜μ—­ λ ˆμ½”λ“œμ—λŠ” 잠금이 λΆˆκ°€
728x90
λ°˜μ‘ν˜•