OLHub

Transactions, ACID & MVCC

ACID deep, isolation levels + 4 anomalies (Jepsen-aware), MVCC internals trong PostgreSQL (xmin/xmax/snapshot), VACUUM + autovacuum, locks + deadlock retry.

7 bài · ~170 phút

Nội dung

Danh sách bài học

  1. 01

    ACID deep dive — Atomicity, Consistency, Isolation, Durability thực sự là gì

    Phá huỷ misconception về ACID: Consistency không phải 'data luôn đúng', Atomicity không phải magic, Durability không phải 'ghi disk'. Hiểu cơ chế thực — undo log, WAL, fsync, group commit.

    ~22 phút
  2. 02

    BEGIN, COMMIT, SAVEPOINT — kiểm soát transaction thủ công

    Autocommit mặc định của psql, cú pháp BEGIN/COMMIT/ROLLBACK, SAVEPOINT cho rollback từng phần, SET TRANSACTION, và node-postgres pattern đúng cho transaction.

    ~18 phút
  3. 03

    Isolation levels và 4 anomalies — dirty read, non-repeatable read, phantom, write skew

    4 isolation level SQL chuẩn, 4 anomaly Berenson 1995, demo từng anomaly với 2 psql session, Snapshot Isolation vs SSI trong PostgreSQL, và write skew trong TaskFlow.

    ~28 phút
  4. 04

    MVCC internals — xmin, xmax, snapshot, và vì sao SELECT không block UPDATE

    Đi sâu vào cơ chế MVCC của PostgreSQL: hidden columns xmin/xmax/ctid, cách UPDATE tạo tuple mới thay vì sửa tại chỗ, snapshot visibility rule, hint bits, CLOG, và so sánh với MySQL InnoDB undo log.

    ~28 phút
  5. 05

    VACUUM & dead tuple — vì sao TaskFlow phình to dù count(*) không tăng

    Giải phẫu dead tuple trong PostgreSQL MVCC: UPDATE/DELETE chỉ set xmax, VACUUM reclaim FSM, autovacuum daemon và công thức trigger, VACUUM FULL downtime, visibility map và Index Only Scan, pitfall long transaction chặn autovacuum.

    ~22 phút
  6. 06

    Locks và Deadlock — row lock, table lock, deadlock detection, SKIP LOCKED

    8 lock mode PostgreSQL, deadlock anatomy với 2 psql session, pg_locks debugging, lock_timeout vs deadlock_timeout, optimistic vs pessimistic locking, và SKIP LOCKED cho queue pattern.

    ~22 phút
  7. 07

    Mini-challenge M06 — Race condition khi 2 user cùng assign task

    TaskFlow: 2 user click 'Assign me to task #42' cùng lúc. Reproduce race với naive code, fix 3 cách (SELECT FOR UPDATE / atomic UPDATE WHERE / Serializable + retry), so sánh tradeoff.

    ~30 phút