Bộ giáo trình tương tác về PostgreSQL internals trên cluster production 1 Primary + 2 Standby (streaming replication, quorum ANY 1). Mỗi journey trace một kịch bản thật từng bước một trên sơ đồ động: component nào đang chạy, dữ liệu chảy đường nào, hàm nào trong source code đảm nhiệm — kèm ghi chú vận hành góc nhìn SRE. Nội dung chuẩn theo PostgreSQL 18, đối chiếu docs chính thức và interdb.jp.
▶ Bắt đầu — journey ① INSERT → Diskhoặc chọn hành trình bên dưới ↓
Một INSERT + COMMIT đi từ client xuống disk: connection, parse/plan/execute, buffer manager, WAL, fsync, sync replication sang 2 standby, rồi checkpoint. Đường ghi trọn vẹn — nền tảng của mọi journey khác.
② FailoverPrimary mất điện đúng lúc backend đang chờ sync rep: phát hiện, fencing, so LSN, promote, timeline switch, pg_rewind — toàn bộ những gì Patroni tự động hoá, làm bằng tay để hiểu tận gốc.
③ SELECT pathMột câu SELECT có JOIN đi qua planner (statistics, cost model, chọn scan/join) và executor (volcano model, hash join, top-N sort), kèm tầng I/O đọc với AIO của PostgreSQL 18.
④ MVCC & VACUUMZoom vào một heap page 8KB: UPDATE tạo phiên bản mới thế nào, vì sao bloat là hệ quả thiết kế có chủ đích, HOT cứu index ra sao, và VACUUM/freeze giữ database sống qua vòng quay XID.
⑤ Crash Recoverypg-1 bị OOM-kill rồi tự đứng dậy — không failover: đọc pg_control, REDO từ checkpoint (so LSN, full-page write cứu torn page), pg_xact định đoạt commit. Vì sao crash không bao giờ làm hỏng dữ liệu đã ack.
⑥ Locking & DeadlockWait-for graph động: 8 mức table lock + ma trận tương thích, row lock sống trong tuple, kịch bản ALTER TABLE dồn toa cả bảng, và deadlock detector quét chu trình mỗi giây — kèm bộ đồ nghề pg_locks/pg_blocking_pids.
⑦ Backup & PITRDELETE nhầm được replicate tức thì sang cả 3 node — chỉ PITR cứu được: base backup online, WAL archive, replay có điểm dừng, cây timeline rẽ nhánh, và incremental backup PG17. Kèm kỷ luật restore drill.
⑧ Logical / CDCWAL vật lý được dịch ngược thành sự kiện row: publication/subscription, ReorderBuffer gom theo transaction, pgoutput, apply worker và origin tracking — nền của mọi pipeline CDC (Debezium/Kafka), kèm failover slots PG17.
⑨ Parallel QueryLeader + background workers cày chung một câu GROUP BY: Gather/Gather Merge, DSM đóng gói snapshot, tuple queue, chia block động, shared hash table PG11, và aggregate hai tầng Partial → Finalize — kèm cách đọc Workers Planned vs Launched.
⑩ Isolation & SSIMảnh cuối của MVCC: snapshot xmin:xmax:xip_list, 10 quy tắc visibility, write-skew lọt lưới REPEATABLE READ ra sao, và SSI bắt nó bằng SIREAD lock + dangerous structure + first-committer-win — kèm kim chỉ nam chọn isolation level.
Phím ← → chuyển bước, Space bật auto-play (8s/bước) · di chuột vào bất kỳ khối nào trên sơ đồ để xem giải thích tiếng Việt · click chip giai đoạn để nhảy nhanh · mỗi bước có URL riêng — copy link là share đúng bước · cuối mỗi trang có Từ điển thành phần đầy đủ.
Nội dung chuẩn theo PostgreSQL 18, đối chiếu docs chính thức; feature mới đều ghi rõ version (PG16/17/18) để vẫn đúng với cụm cũ hơn. Muốn đào sâu từng phần, đọc theo map dưới đây.
Sách internals miễn phí chuẩn mực nhất, cập nhật liên tục (đã có Asynchronous I/O §8.5). Map chương ↔ journey: Ch.1 Cluster & Heap ↔ ①GĐ4 · Ch.2 Process & Memory ↔ ①GĐ1 · Ch.3 Query Processing ↔ ①GĐ2–3 + ③ + ⑨ (§3.7 Parallel Query) · Ch.5 Concurrency Control ↔ ④ MVCC + ⑩ (§5.5–5.6 Snapshot/Visibility, §5.9 SSI) · Ch.6 VACUUM ↔ ④ · Ch.7 HOT & Index-Only Scan ↔ ③GĐ5 + ④GĐ3 · Ch.8 Buffer Manager ↔ ①GĐ4 + ③GĐ4 · Ch.9 WAL & Checkpoint ↔ ①GĐ5,7 · Ch.10 PITR & Timeline ↔ ②GĐ3–4 · Ch.11 Streaming Replication ↔ ①GĐ6 + ② · Ch.12 Logical Decoding ↔ ⑧.
Nguồn đối chiếu chính. Đọc kèm: Release Notes 18 (AIO, skip scan, checksums mặc định), chương High Availability, WAL Configuration, và Monitoring (pg_stat_io, pg_aios).
Bài viết thực chiến đi cùng journey ④: theo dấu một row từ page/tuple → MVCC → index bloat → VACUUM, kèm demo tự chạy được (ctid/xmin/xmax, pgstattuple, bt_page_items, REINDEX CONCURRENTLY) và ngưỡng bloat thực dụng cho production.
pg_waldump đọc từng WAL record · pageinspect mổ xẻ page 8KB · pg_buffercache soi shared_buffers · pg_controldata đọc pg_control — dùng để tự chạy lại từng bước trên database thật.