Cơ sở dữ liệu 28/08/2026 11 phút

Hạ ngưỡng autovacuum theo lời khuyên phổ biến — nhưng bản chỉnh tay lại phình hơn bản mặc định 37%

Ba phép đo có kiểm soát trong PostgreSQL cho thấy hạ autovacuum_vacuum_scale_factor gần như không giảm được bloat khi tải ghi nặng — bản chỉnh tay còn phình hơn. Nút thắt thật là naptime và cost_delay, và mức phình ổn định do tốc độ ghi quyết định chứ không phải ngưỡng.

Cơ sở dữ liệu 28/08/2026 10 phút

Một bộ đếm 32 bit tiêu 5.053 số mỗi giây — 4,9 ngày là cạn, và khi cạn PostgreSQL từ chối mọi lệnh ghi

Đo tốc độ tiêu số hiệu giao dịch trong PostgreSQL: pgbench tám kết nối ăn 5.053 XID mỗi giây, đủ cạn 2,1 tỷ trong 4,9 ngày. Vì sao autovacuum chống-tràn-số không tắt được, và vì sao bảng lưu trữ tĩnh — chứ không phải bảng ghi nhiều — mới là bảng nguy hiểm.

Cơ sở dữ liệu 28/08/2026 11 phút

Đổi sang mức cô lập 'an toàn hơn' rồi mất 57% số ghi mà không một dòng lỗi — bốn mức, đo bằng tải thật

Dựng lại từng hiện tượng cô lập giao dịch bằng hai phiên chạy song song trong PostgreSQL: vì sao repeatable read không chặn được lệch ghi, và vì sao nâng lên mức cao mà không viết vòng thử lại làm biến mất 137 trong 480 lần ghi — im lặng.

Cơ sở dữ liệu 28/08/2026 11 phút

Hai giao dịch khoá hai dòng ngược thứ tự, cả hai đứng hình 2 giây — và một câu lệnh làm hàng đợi nhanh gấp 5,75 lần

Dựng lại deadlock có chủ đích trong PostgreSQL, đo thời gian phát hiện đúng bằng deadlock_timeout, và chỉ ra vì sao SKIP LOCKED làm hàng đợi công việc nhanh gấp 5,75 lần. Kèm cách chặn deadlock triệt để và cách tìm ai đang chặn ai.

Cơ sở dữ liệu 28/08/2026 11 phút

FOR UPDATE hứa 'mọi dòng tôi khoá đều khớp' — nhưng không hứa 'tôi khoá mọi dòng khớp', và cỡ lô đúng nhanh gấp 48 lần

Đo hàng đợi công việc trong PostgreSQL: FOR UPDATE đọc lại dòng sau khi chờ được khoá — và sự bất đối xứng của việc đọc lại đó là gốc của nhiều lỗi đua tranh. Kèm con số: cỡ lô 100 nhanh gấp 48 lần cỡ lô 1, chỉ mục một phần nhỏ hơn 375 lần, và một lời cảnh báo phổ biến tôi không dựng lại được.

Cơ sở dữ liệu 28/08/2026 10 phút

10 tiến trình cùng khởi động một cron, chỉ 1 chạy — nhưng hai cái bẫy khiến nó lặng lẽ ngừng hoạt động

Advisory lock là khoá không gắn với dòng nào: 10 bản sao ứng dụng cùng khởi động một công việc định kỳ, chỉ 1 chạy, không cần bảng phối hợp. Nó không rẻ hơn khoá hàng, và có hai cái bẫy — băm tên gây va chạm, và pool kết nối giữ khoá — mà cả hai đều hỏng trong im lặng.