# DB νŠΈλžœμž­μ…˜(Transaction)


# νŠΈλ Œμž­μ…˜μ΄λž€?

λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚€κΈ° μœ„ν•΄ μˆ˜ν–‰ν•˜λŠ” μž‘μ—… λ‹¨μœ„


μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚¨λ‹€λŠ” 것 β†’ SQL μ§ˆμ˜μ–΄λ₯Ό 톡해 DB에 μ ‘κ·Όν•˜λŠ” 것

- SELECT
- INSERT
- DELETE
- UPDATE

μž‘μ—… λ‹¨μœ„ β†’ λ§Žμ€ SQL λͺ…령문듀을 μ‚¬λžŒμ΄ μ •ν•˜λŠ” 기쀀에 따라 μ •ν•˜λŠ” 것

μ˜ˆμ‹œ) μ‚¬μš©μž Aκ°€ μ‚¬μš©μž Bμ—κ²Œ λ§Œμ›μ„ μ†‘κΈˆν•œλ‹€.

* μ΄λ•Œ DB μž‘μ—…
- 1. μ‚¬μš©μž A의 κ³„μ’Œμ—μ„œ λ§Œμ›μ„ μ°¨κ°ν•œλ‹€ : UPDATE 문을 μ‚¬μš©ν•΄ μ‚¬μš©μž A의 μž”κ³ λ₯Ό λ³€κ²½
- 2. μ‚¬μš©μž B의 κ³„μ’Œμ— λ§Œμ›μ„ μΆ”κ°€ν•œλ‹€ : UPDATE 문을 μ‚¬μš©ν•΄ μ‚¬μš©μž B의 μž”κ³ λ₯Ό λ³€κ²½

ν˜„μž¬ μž‘μ—… λ‹¨μœ„ : 좜금 UPDATEλ¬Έ + μž…κΈˆ UPDATEλ¬Έ
β†’ 이λ₯Ό 톡틀어 ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ΄λΌκ³  ν•œλ‹€.
- μœ„ 두 쿼리문 λͺ¨λ‘ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ–΄μ•Όλ§Œ "ν•˜λ‚˜μ˜ μž‘μ—…(νŠΈλžœμž­μ…˜)"이 μ™„λ£Œλ˜λŠ” 것이닀. `Commit`
- μž‘μ—… λ‹¨μœ„μ— μ†ν•˜λŠ” 쿼리 쀑 ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ν•˜λ©΄ λͺ¨λ“  쿼리문을 μ·¨μ†Œν•˜κ³  이전 μƒνƒœλ‘œ λŒλ €λ†“μ•„μ•Όν•œλ‹€. `Rollback`


즉, ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ 섀계λ₯Ό 잘 λ§Œλ“œλŠ” 것이 데이터λ₯Ό λ‹€λ£° λ•Œ λ§Žμ€ 이점을 κ°€μ Έλ‹€μ€€λ‹€.


# νŠΈλžœμž­μ…˜ νŠΉμ§•


  • μ›μžμ„±(Atomicity)

    νŠΈλžœμž­μ…˜μ΄ DB에 λͺ¨λ‘ λ°˜μ˜λ˜κ±°λ‚˜, ν˜Ήμ€ μ „ν˜€ λ°˜μ˜λ˜μ§€ μ•Šμ•„μ•Ό λœλ‹€.

  • 일관성(Consistency)

    νŠΈλžœμž­μ…˜μ˜ μž‘μ—… 처리 κ²°κ³ΌλŠ” 항상 일관성 μžˆμ–΄μ•Ό ν•œλ‹€.

  • 독립성(Isolation)

    λ‘˜ μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— 병행 μ‹€ν–‰λ˜κ³  μžˆμ„ λ•Œ, μ–΄λ–€ νŠΈλžœμž­μ…˜λ„ λ‹€λ₯Έ νŠΈλžœμž­μ…˜ 연산에 끼어듀 수 μ—†λ‹€.

  • 지속성(Durability)

    νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμœΌλ©΄, κ²°κ³ΌλŠ” 영ꡬ적으둜 λ°˜μ˜λ˜μ–΄μ•Ό ν•œλ‹€.


# Commit

ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ 끝났고, DBκ°€ μΌκ΄€μ„±μžˆλŠ” μƒνƒœμΌ λ•Œ 이λ₯Ό μ•Œλ €μ£ΌκΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μ—°μ‚°


# Rollback

ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ μ²˜λ¦¬κ°€ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ νŠΈλžœμž­μ…˜ μ›μžμ„±μ΄ 깨진 경우

transaction이 μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ§€ μ•Šμ•˜μ„ λ•Œ, last consistent state (예) Transaction의 μ‹œμž‘ μƒνƒœ) 둜 roll back ν•  수 있음.


상황이 주어지면 DB μΈ‘λ©΄μ—μ„œ μ–΄λ–»κ²Œ ν•΄κ²°ν•  수 μžˆμ„μ§€ λŒ€λ‹΅ν•  수 μžˆμ–΄μ•Ό 함




# Transaction 관리λ₯Ό μœ„ν•œ DBMS의 μ „λž΅

이해λ₯Ό μœ„ν•œ 2가지 κ°œλ… : DBMS의 ꡬ쑰 / Buffer 관리 μ •μ±…


  1. DBMS의 ꡬ쑰

크게 2가지 : Query Processor (질의 처리기), Storage System (μ €μž₯ μ‹œμŠ€ν…œ)

μž…μΆœλ ₯ λ‹¨μœ„ : κ³ μ • 길이의 page λ‹¨μœ„λ‘œ disk에 μ½κ±°λ‚˜ μ“΄λ‹€.

μ €μž₯ 곡간 : λΉ„νœ˜λ°œμ„± μ €μž₯ μž₯치인 disk에 μ €μž₯, 일뢀뢄을 Main Memory에 μ €μž₯


  1. Page Buffer Manager or Buffer Manager

DBMS의 Storage System에 μ†ν•˜λŠ” λͺ¨λ“ˆ 쀑 ν•˜λ‚˜λ‘œ, Main Memory에 μœ μ§€ν•˜λŠ” νŽ˜μ΄μ§€λ₯Ό κ΄€λ¦¬ν•˜λŠ” λͺ¨λ“ˆ

Buffer 관리 정책에 따라, UNDO 볡ꡬ와 REDO 볡ꡬ가 μš”κ΅¬λ˜κ±°λ‚˜ 그렇지 μ•Šκ²Œ λ˜λ―€λ‘œ, transaction 관리에 맀우 μ€‘μš”ν•œ 결정을 κ°€μ Έμ˜¨λ‹€.


  1. UNDO

ν•„μš”ν•œ 이유 : μˆ˜μ •λœ Page듀이 **Buffer ꡐ체 μ•Œκ³ λ¦¬μ¦˜μ— λ”°λΌμ„œ λ””μŠ€ν¬μ— 좜λ ₯**될 수 있음. Buffer κ΅μ²΄λŠ” transactionκ³ΌλŠ” λ¬΄κ΄€ν•˜κ²Œ buffer의 μƒνƒœμ— λ”°λΌμ„œ, 결정됨. 이둜 인해, μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ§€ μ•Šμ€ transaction이 λ³€κ²½ν•œ page듀은 원상 볡ꡬ λ˜μ–΄μ•Ό ν•˜λŠ”λ°, 이 볡ꡬλ₯Ό undo라고 함.

  • 2개의 μ •μ±… (μˆ˜μ •λœ νŽ˜μ΄μ§€λ₯Ό λ””μŠ€ν¬μ— μ“°λŠ” μ‹œμ μœΌλ‘œ λΆ„λ₯˜)

    steal : μˆ˜μ •λœ νŽ˜μ΄μ§€λ₯Ό μ–Έμ œλ“ μ§€ λ””μŠ€ν¬μ— μ“Έ 수 μžˆλŠ” μ •μ±…

    • λŒ€λΆ€λΆ„μ˜ DBMSκ°€ μ±„νƒν•˜λŠ” Buffer 관리 μ •μ±…
    • UNDO loggingκ³Ό 볡ꡬλ₯Ό ν•„μš”λ‘œ 함.

    Β¬steal : μˆ˜μ •λœ νŽ˜μ΄μ§€λ“€μ„ EOT (End Of Transaction)κΉŒμ§€λŠ” 버퍼에 μœ μ§€ν•˜λŠ” μ •μ±…

    • UNDO μž‘μ—…μ΄ ν•„μš”ν•˜μ§€ μ•Šμ§€λ§Œ, 맀우 큰 λ©”λͺ¨λ¦¬ 버퍼가 ν•„μš”ν•¨.

  1. REDO

이미 commitν•œ transaction의 μˆ˜μ •μ„ μž¬λ°˜μ˜ν•˜λŠ” 볡ꡬ μž‘μ—…

Buffer 관리 정책에 영ν–₯을 λ°›μŒ

  • Transaction이 μ’…λ£Œλ˜λŠ” μ‹œμ μ— ν•΄λ‹Ή transaction이 μˆ˜μ •ν•œ pageλ₯Ό λ””μŠ€ν¬μ— μ“Έ 것인가 μ•„λ‹Œκ°€λ‘œ κΈ°μ€€.


    FORCE : μˆ˜μ •ν–ˆλ˜ λͺ¨λ“  νŽ˜μ΄μ§€λ₯Ό Transaction commit μ‹œμ μ— disk에 반영

    transaction이 commit λ˜μ—ˆμ„ λ•Œ μˆ˜μ •λœ νŽ˜μ΄μ§€λ“€μ΄ disk 상에 λ°˜μ˜λ˜λ―€λ‘œ redo ν•„μš” μ—†μŒ.


    Β¬FORCE : commit μ‹œμ μ— λ°˜μ˜ν•˜μ§€ μ•ŠλŠ” μ •μ±…

    transaction이 disk μƒμ˜ db에 λ°˜μ˜λ˜μ§€ μ•Šμ„ 수 μžˆκΈ°μ— redo 볡ꡬ가 ν•„μš”. (λŒ€λΆ€λΆ„μ˜ DBMS μ •μ±…)



# [참고사항]

μ΅œμ’… μˆ˜μ • : 12/17/2022, 7:23:59 AM