Nội dung
Danh sách bài học
- 01~22 phút
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.
- 02~18 phút
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.
- 03~28 phút
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.
- 04~28 phút
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.
- 05~22 phút
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.
- 06~22 phút
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.
- 07~30 phút
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.