Transaction & Isolation Level
Ba module tương tác: (1) chọn isolation level và xem anomaly nào xảy ra giữa 2 transaction đồng thời; (2) deadlock visualizer — lock ngược thứ tự và cách fix; (3) optimistic vs pessimistic lock chạy song song.
1. Isolation Level Explorer
Cùng một interleaving: T1 đọc số dư A hai lần; ở giữa, T2 cập nhật A và commit. Đổi isolation level rồi bấm Chạy để xem lần đọc thứ 2 của T1 ra gì — và anomaly nào xuất hiện.
| Level | Dirty | Non-repeatable | Phantom |
|---|---|---|---|
| Read Uncommitted | cho phép | cho phép | cho phép |
| Read Committed | chặn | cho phép | cho phép |
| Repeatable Read | chặn | chặn | cho phép* |
| Serializable | chặn | chặn | chặn |
* Postgres RR (snapshot MVCC) thực tế cũng chặn phantom — nghiêm ngặt hơn chuẩn SQL.
2. Deadlock Visualizer
T1 chuyển A→B, T2 chuyển B→A, cả hai dùng FOR UPDATE. Nếu khóa theo
thứ tự tham số → có thể khóa chéo → deadlock. Bật
Lock ordering để luôn khóa id nhỏ trước → hết deadlock.
T1: chuyển A → B
T2: chuyển B → A
3. Optimistic vs Pessimistic Lock
Hai transaction cùng muốn ghi 1 row. Bên trái: Pessimistic (FOR UPDATE) — T2 phải đợi T1 nhả lock. Bên phải: Optimistic (version column) — cả hai chạy song song, T2 phát hiện conflict lúc ghi rồi retry.