π― 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
BEGIN
BEGIN BEGIN — start a transaction block Synopsis BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ] where …
www.postgresql.org
Change Data Capture (CDC): What it is and How it Works | Striim
Change Data Capture is ideal for real time data movement. Learn how it works, the best use cases for CDC, and the role it plays in streaming ETL.
www.striim.com
PostgreSQL Streaming Replication - a Deep Dive
In this blog, we are going to review a little bit of the history of PostgreSQL built-in replication features, and deep dive into how streaming replication works.
severalnines.com
'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 |