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

Thêm một điều kiện WHERE đúng, ước lượng tệ đi 66 lần — bộ lập lịch nhân hai xác suất như thể chúng không liên quan

Đo bộ lập lịch PostgreSQL làm việc với số liệu cũ: ước lượng 1 dòng trong khi thực tế 500.000, và một lớp bảo vệ bí mật thường cứu nó. Rồi tới kiểu sai mà ANALYZE không bao giờ chữa được — giả định các cột độc lập — và một câu lệnh sửa từ sai 66,7 lần xuống đúng.

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

UPDATE một số dư — PostgreSQL ghi ra 500.000 dòng mới, và một phiên ngồi im làm bảng phình gấp 5 lần

Nhìn thẳng vào các byte trên đĩa để đo MVCC: 500.000 dòng sau năm lần cập nhật chiếm 361 MB thay vì 60 MB, DELETE không giải phóng gì, và chỉ một giao dịch mở là đủ ghim mọi phiên bản cũ khiến VACUUM bó tay trên toàn cơ sở dữ liệu.

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

VACUUM chạy xong mà tệp không nhỏ đi một byte — và vì sao đó là điều hoàn toàn bình thường

Đo bảng PostgreSQL phình lên rồi ổn định: VACUUM thường thu hồi chỗ để tái dùng nhưng giữ nguyên kích thước tệp, VACUUM FULL viết lại toàn bảng và chặn mọi truy vấn, còn autovacuum chạy chậm 25 lần vì bị hãm tốc từ thời đĩa cứng quay. Kèm cách phân biệt bloat thật với trạng thái cân bằng bình thường.

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.