π― Goals
- νΈλμμ μ μ¬μ© λ°©λ²μ μμλ³Έλ€.
- νΈλμμ μ΄ λμ μ리λ₯Ό κ·Έλ¦ΌμΌλ‘ μ 리νλ€.
- λμμ리 μ΄ν΄λ₯Ό μν΄ WAL, CDCκ° λ¬΄μμΈμ§ μμλ³Έλ€.
1. νΈλμμ μ¬μ© λ°©λ²
BEGIN
νΈλμμ λΈλ‘ μ΄κΈ°ν ν€μλλ‘
λͺ¨λ λ¬Έμ₯μ νλμ νΈλμμ μΌλ‘ λ¬Άλλ€.
`COMMIT` `ROLLBACK` μ°μ°μ λ§λκΈ° μ κΉμ§
Automacity λ₯Ό 보μ₯νλ λ μ
CPU/Disk activity κ° μκΈ° λλ¬Έμ μλλ λ λ리λ€.
WITHOUT BEGIN
κΈ°λ³Έμ μΌλ‘ BEGIN μ΄ μμΌλ©΄ κ°κ°μ statement (쿼리문)μ΄ λ 립λ νΈλμμ μ΄ λλ€.
μλλ λ λΉ λ₯΄λ€.
π μ΄λ΄ λ νΈλμμ μ μ¨λΌ
All or Nothing
μ¬λ¬ μΏΌλ¦¬κ° νλμ μμ λ¨μλ‘ λ¬Άμ¬μΌ ν λ
λ€ μ€νλκ±°λ λ€ μλκ±°λ
2. νΈλμμ μ λμ μ리
νΈλμμ μ μ΄λ»κ² COMMIT / ROLLBACK ν μ μκ²λμλ?
νΈλμμ λμμ μ€μ¬μ Change Data Capture (CDC) Mechanism μ΄ μ‘΄μ¬νλ€.
Log-Based Change Data Capture
λͺ¨λ νΈλμμ μ λ€μκ³Ό κ°μ μμλ₯Ό λ°λ₯Έλ€.
- WAL μ λ‘κ·Έλ₯Ό λ¨κΈ΄λ€.
- CDC κ° λ‘κ·Έμ λ³νκ° μμ λλ§λ€ κ°μ§νλ€.
- COMMIT -> μ€μ DBμ λ³κ²½λ (Capture λ) λ΄μμ λ°μνλ€. (flush to disk, WAL -> Disk)
- ROLLBACK νλ©΄ WALμ λ°λΌ Redo νλ€.
μλ 컬λ¬νν κ·Έλ¦ΌμΌλ‘ ννν΄λ³΄μ.
WAL?
Write Ahead Log λΌλ μ΄λ¦μ΄ μ νμνμκΉ?
λͺ¨λ DB νΈλμμ μ μ€μ DB Storage μ μ¨μ§κΈ° μ μ (Ahead)
λ²νΌμ λ‘κ·Έ(Write Log)λ₯Ό λ¨κΈ΄λ€.
Write Ahead Log λ λ€μ λ§ν΄ DBμμ μΌμ΄λλ λͺ¨λ μ°μ°μ λ‘κΉ ν΄λλ κ³³μ΄λ€.
Postgres μμλ WALμ Transaction Log λ‘ λͺ λͺ νκΈ°λ νλ€.
WAL νΉμ§
- λ³κ²½ μ μ Log λ¨κ²¨μ Data Durability 보μ₯.
- Append μ°μ°
- λμ μμ μ Commit μ§μ
- λ§€λ² Disk μ μΈ μ μμΌλ―λ‘ Log Buffer μ μμλκ³
μ£ΌκΈ°μ μΌλ‘ flush() (Memory -> Disk)
μ WAL μ΄ νμνκ°?
맀 쿼리λ§λ€ μ€μ ν
μ΄λΈμ μ§μ μ΄λ€κ³ κ°μ ν΄λ³΄μ.
(DBλ 물리 μ μ₯μ₯μΉ, μ¦ λ³΄μ‘° κΈ°μ΅μ₯μΉμ λ°μ΄ν°λ₯Ό μ μ₯νλ€λ μ μ κΈ°μ΅νμ)
λ³΄μ‘°κΈ°μ΅ μ₯μΉ I/O λ Cost κ° λ§€μ° λμ μμ μ΄λ€. λμ€μ μ·¨μν (ROLLBACK)μλ μλ μ°μ°κΉμ§ λ§€λ² IOλ₯Ό νλ€λ©΄ DB μ°μ°μλκ° ν¨μ¬ λλ €μ Έ λΉν¨μ¨μ μ΄λ€. κ·Έλμ, Disk μ°κΈ° μ°μ°μ μ€μ΄κΈ° μν΄ νμνλ€.
π CDC, WAL μ ν΅ν νΈλμμ λμ κ³Όμ μ 리
DBμ κ°ν΄μ§λ λͺ¨λ INSERT, UPDATE, DELETE λ±μ DML μ ν¬ν¨ν λͺ¨λ μ°μ°μ WALμ κΈ°λ‘λκ³ ,
μ΄ μ€μ CDCκ° λ³νλ λ°μ΄ν°λ§μ κ°μ§ (Capture) νμ¬ λ²νΌλ§νλ€.
COMMIT
CDCμ μν΄ λ²νΌμ λ΄κ²Όλ λ°μ΄ν°λ€μ `COMMIT` λλ μκ° λͺ¨λ μ€μ DB (Disk) μ λμ€ν¨μΉλλ€.
ROLLBACK
λ°μ΄ν°λ² μ΄μ€μμ λͺ¨λ λ‘κ·Έλ₯Ό WAL μ κΈ°λ‘νκΈ° λλ¬Έμ, ROLLBACK μλμ CDCμ μν΄ μΊ‘μ³λ λ²νΌμ λ°μ΄ν°λ₯Ό μμ (Abort)μν€κ³
νΉμ WAL λ‘κ·Έ μνλ‘ λλμ(ROLLABCK) κ°λ κ²μ΄ κ°λ₯νλ€
π Reference
'DataBase > PostgreSQL' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[PostgreSQL] Transaction + Pool μ¬μ©μ μ£Όμ (0) | 2022.04.04 |
---|---|
[PostgreSQL] Function (feat. trigger) (0) | 2022.03.29 |
[PostgreSQL] Notify (0) | 2022.03.25 |
[PostgreSQL] Sequence ν¨μ λ° κ° λ³κ²½ (λ²μ) (0) | 2022.03.25 |
Description on DB Column (0) | 2022.03.18 |