νΈλμμ
νΈλμμ μ΄λ?
λ°μ΄ν°λ² μ΄μ€μ μνλ₯Ό λ³ν(SQL μ§μμ΄ μ¬μ©)μν€κΈ° μν΄ μννλ μμ λ¨μ
μμ λ¨μλ SQL λͺ λ Ήλ¬Έλ€λ‘ μ΄λ£¨μ΄μ Έ μμΌλ©° κ°λ°μκ° μ νλ κΈ°μ€μ λ°λΌ λ€λ¦
μμ) νμ μ 보 μμ
- μ μ₯ λ²νΌ ν΄λ¦ : UPDATEλ¬Έμ μ΄μ©νμ¬ μ¬μ©μ μ 보 μμ
- νμ μ 보 κ΅¬μ± : SELECTλ¬Έμ μ΄μ©νμ¬ μ¬μ©μ μ 보 μ΅μ μ μ§
- μμ λ¨μ : UPDATE + SELECT
νΈλμμ νΉμ§
- μμμ± : DBμ λͺ¨λ λ°μλκ±°λ, μμ λ°μλμ§ μκ±°λ
- μΌκ΄μ± : μμ μ²λ¦¬ κ²°κ³Όλ λ κ°μμΌν¨
- λ λ¦½μ± : νΈλμμ μ μ°μ°μ λ€λ₯Έ νΈλμμ μ΄ λΌμ΄λ€ μ μμ
- μ§μμ± : νΈλμμ μ΄ μ±κ³΅μ μΌλ‘ μλ£λμλ€λ©΄, κ·Έ κ²°κ³Όλ μꡬμ μ΄μ¬μΌν¨
Commitκ³Ό Rollback
- Commit : νλμ νΈλμμ μ΄ μλ£λμμΌλ©°, DBκ° μΌκ΄μ±μλ μνμΌ λ μλ €μ£ΌκΈ° μν΄ μ¬μ©νλ μ°μ°
- Rollback : νλμ νΈλμμ μ΄ λΉμ μμ μΌλ‘ μ’ λ£λμ΄ μμμ±μ΄ μΉ¨ν΄λ κ²½μ°, νΈλμμ μμμ μνλ‘ rollback κ°λ₯
νΈλμμ κ΄λ¦¬
DBMSμ ꡬ쑰
- Query Processor(μ§μ μ²λ¦¬κΈ°), Storage System(μ μ₯ μμ€ν ), Page Buffer
- μ μΆλ ₯ λ¨μ : κ³ μ κΈΈμ΄μ page λ¨μλ‘ diskμ μ½κ±°λ μ
- μ μ₯ κ³΅κ° : λΉνλ°μ± μ μ₯ μ₯μΉ diskμ μ μ₯νκ³ , μΌλΆλ₯Ό Main Memoryμ μ μ₯
Page Buffer Manager
- DBMSμ μ μ₯ μμ€ν μ μνλ λͺ¨λ μ€ νλλ‘, Main Memoryμ μ μ§νλ νμ΄μ§λ₯Ό κ΄λ¦¬
- Bufferμ κ΄λ¦¬ μ μ± μ λ°λΌ UNDO 볡ꡬ, REDO 볡ꡬμ νμμ±μ΄ κ²°μ λ¨
UNDO
- Buffer κ΅μ²΄ μκ³ λ¦¬μ¦μ λ°λΌ Bufferμ κ΅μ²΄λ Bufferμ μνμ λ°λΌ κ²°μ λλ―λ‘(νΈλμμ μ μνX) νΈλμμ κ° λ³κ²½λ pageλ€μ΄ λμ€ν¬μ μΆλ ₯λ μ μμ
- λ§μ½ νΈλμμ μ΄ μ μμ μΌλ‘ μ’ λ£λμ§ μμλ€λ©΄ λμ€ν¬μ μ λ ₯λ pageλ₯Ό μμ 볡ꡬ μμΌμΌν¨ (UNDO)
UNDOκ° μν₯μ λ°λ λ²νΌ κ΄λ¦¬ μ μ±
- 첫λ²μ§Έ μ μ± μ μμ λ νμ΄μ§λ₯Ό μΈμ λ μ§ λμ€ν¬μ μμ±ν μ μλ μ μ± μ΄λ€. λλΆλΆμ DBMSκ° μ±ννλ Buffer κ΄λ¦¬ μ μ± μ΄λ©°, UNDO loggingκ³Ό λ³΅κ΅¬κ° νμνλ€.
- λλ²μ§Έ μ μ± μ νΈλμμ μ’ λ£ μμ κΉμ§λ λ²νΌμ μ μ§νλ μ μ± μ΄λ€. UNDOλ νμμμ§λ§, λ§€μ° ν° λ©λͺ¨λ¦¬ λ²νΌκ° νμνλ€.
REDO
- μ΄λ―Έ commitν νΈλμμ μ μμ μ λμ€ν¬μ λ°μνλ 볡ꡬ μμ
REDOκ° μν₯μ λ°λ λ²νΌ κ΄λ¦¬ μ μ±
- μμ νλ λͺ¨λ νμ΄μ§λ₯Ό νΈλμμ μ»€λ° μμ μ λμ€ν¬μ λ°μνλ μ μ± , νΈλμμ μ΄ μ»€λ°λμμ λ μμ λ νμ΄μ§λ€μ΄ diskμ λ°μλλ―λ‘ redoκ° νμ μλ€.
- μμ νλ νμ΄μ§λ₯Ό νΈλμμ μ»€λ° μμ μ λμ€ν¬μ λ°μνμ§ μλ μ μ± , νΈλμμ μ΄ λμ€ν¬μμ dbμ λ°μλμ§ μμ μ μκΈ°μ redo νμνλ©° λλΆλΆμ DBMS μ μ± μ΄λ€.
νΈλμμ 격리 μμ€
νΈλμμ 격리 μμ€μ΄λ?
νΈλμμ 격리μμ€μ΄λ λμμ μ¬λ¬ νΈλμμ μ΄ μνλ λ, νΈλμμ λΌλ¦¬ μΌλ§λ κ³ λ¦½λμ΄ μλμ§λ₯Ό λνλ΄λ κ²μ λ§νλ€.
μ€μ λ‘ ACID μμΉμ μ’ μ’ μ§μΌμ§μ§ μλλ€, DBμμ§μ λμμ±μ μν΄μ ACID μμΉμ ν¬μνμ¬ λμμ±μ μ»μ μ μλ isolation level(격리 μμ€)μ μ 곡νλ€.
InnoDBμ 격리 μμ€ μ’ λ₯
- READ UNCOMMITED : μ΄λ€ νΈλμμ μ΄ νΉμ ν μ΄λΈμ μ‘κ³ μλλΌλ λ€λ₯Έ νΈλμμ μμ μ‘°νκ° κ°λ₯νλ€.
- READ COMMITED : μ΄λ€ νΈλμμ μ μμ μ΄ μλ£λ ν COMMITμ΄ λμ΄μΌλ§ λ€λ₯Έ νΈλμμ μμ μ‘°νκ° κ°λ₯νλ€.
- REPETABLE READ : λ°λ³΅ν΄μ μ½κΈ° μμ μ μννλλΌλ μ½μ΄ λ€μ΄λ κ°μ΄ λ³ννμ§ μλ μ λμ 격리 μμ€μ 보μ₯νλ€.
- SERIALIZABLE : μ°κΈ° μμ λΏλ§ μλλΌ μ½κΈ° μμ μλ LOCKμ μ€μ νλ 격리 μμ€μ΄λ€.
READ UNCOMMITED
μμ§ μ»€λ°λμ§ μμ λ°μ΄ν°λ μ½μ΄μ¬ μ μλ 격리 μμ€μ΄λ€. λμ μ΄ κ²©λ¦¬ μμ€μ μ¬μ©νλ€λ©΄ DIRTY READκ° λ°μν μ μλ€.
μ°Έκ³ ) DIRTY READ
λ‘€λ°±μ΄ μ΄λ£¨μ΄μ Έ μ€μ λ‘ μ»€λ°μ΄ μ΄λ£¨μ΄μ§μ§ μμ λ°μ΄ν°λ₯Ό μ½μ΄ λ€μ΄λ νμμ λ§νλ€.
READ COMMITED
컀λ°λ λ°μ΄ν°λ§ 보μ΄λ μμ€μ isolationμ 보μ₯νλ 격리 μμ€μ΄λ€. REPEATBLE READκ° Transactionμ΄ μ²« μ½κΈ° μμ μ κΈ°μ€μΌλ‘ Consistent Readλ₯Ό μννλ λ°λ©΄, READ COMMITEDλ μ½κΈ° μμ λ§λ€ DB snapshotμ λ€μ ꡬμ±νλ€. κ·Έλ κΈ° λλ¬Έμ μ½κΈ° μμ λ§λ€ 컀λ°λ λ°μ΄ν°λ₯Ό μ½μ΄μ¬ μ μλ κ²μ΄λ€. λμ νλμ νΈλμμ μμ μ½κΈ° μμ μ μννμ λ λ κ°μ κ²°κ³Όλ₯Ό κ°μ ΈμμΌ νλ μ ν©μ±μ μ΄κΈλλ€. (UNREPETABLE READ)
REPETABLE READ
λ°λ³΅ν΄μ μ½κΈ° μμ μ μννλλΌλ κ°μ΄ λ³ννμ§ μλ isolationμ 보μ₯νλ 격리 μμ€μ΄λ€. REPETABLE READλ νΈλμμ μμ μμ μ²μ μ½κΈ° μμ μ μνν λμ μκ°μ κΈ°λ‘ν ν κ·Έ μ΄ν λͺ¨λ μ½κΈ° μμ μμ κ·Έ μκ°λμ Consistent Readλ₯Ό μννλ€. λ°λΌμ νΈλμμ μμ μ€μ μ κ·Όνλ ν μ΄λΈμ μλ‘μ΄ μ»€λ°μ΄ μ΄λ£¨μ΄μ‘λλΌλ 첫 μ½κΈ° μμ λ ꡬμ±λ snapshotμ μ½μ΄μ€κΈ° λλ¬Έμ κ°μ λ³νκ° μλ€. λμ μ΄ κ²©λ¦¬ μμ€μ μ¬μ©νλ€λ©΄ PHANTOM READκ° λ°μν μ μλ€.
μ°Έκ³ ) PHANTOM READ
Consistent Readκ° λ³κ²½λ λ°μ΄ν°μ νν΄μλ§ Snapshotμ ꡬμ±νλλ°, λ§μ½ λ°μ΄ν°κ° μΆκ°λλ κ²½μ° λ€μ μ½κΈ° μμ μμ μμ±νμ§λ μμλ νμ΄ μΆκ°λλ νμμ ν¬ν μ½κΈ°λΌκ³ νλ€.
SERIALIZBLE
μ½κΈ° μμ μ μνν λλ λ½μ 건 νμ μννλ 격리 μμ€μΈλ°, λ°λλ½μ΄ λ°μν νλ₯ μ΄ κ΅μ₯ν λλ€.
μ°Έκ³ ) Consistent Read
μ½κΈ° μμ μ μνν λ νμ¬ DBμ κ°μ΄ μλ νΉμ μμ μ DB snapshotμ μ½μ΄μ€λ κ²μ μλ―Ένλ€. λ¬Όλ‘ μ΄ snapshotμ 컀λ°λ λ³νλ§μ΄ μ μ©λ μ΄λ―Έμ§μ΄λ©° Inno DB μμ§μ logλ₯Ό ν΅ν΄ μ΄λ₯Ό μ§μνλ€.
Reference
https://d2.naver.com/helloworld/407507
https://real-dongsoo7.tistory.com/57
λ°μ΄ν°λ² μ΄μ€ νΈλμμ (Transaction)μ λνμ¬ μμ보μ!
μμνκΈ° μ μ ν΄λΉ λΈλ‘κ·Έμ μμ±λλ κΈμ μ£ΌμΈμ₯μ μ§κ·Ήν μ£Όκ΄μ μΈ μκ°μ΄ λ€μμ΄λ©°, λλΆλΆμ μ§μμ ꡬκΈλ§μ ν΅ν΄ μ»κ³ μκΈ° λλ¬Έμ μ³μ§μμ μ λ³΄κ° μμ΅λλ€. μλͺ»λ λΆλΆμ΄λ μμ ν΄μΌ νλ λΆλΆμ΄ μλ€..
real-dongsoo7.tistory.com
https://github.com/gyoogle/tech-interview-for-developer
gyoogle/tech-interview-for-developer
πΆπ» μ μ κ°λ°μ μ 곡 μ§μ & κΈ°μ λ©΄μ λ°±κ³Όμ¬μ π. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.
github.com