Cơ sở dữ liệu 29/08/2026 9 phút

Trên máy 16 lõi, thông lượng đạt đỉnh ở đúng 16 kết nối — lên 256 thì độ trễ tăng 20 lần mà chẳng phục vụ thêm ai

max_connections = 500 là cấu hình phổ biến, và nó thường sai. Tôi đo xem một máy chủ thật sự phục vụ được bao nhiêu kết nối trước khi thêm nữa chỉ làm mọi thứ tệ đi — kèm ba chi phí của một kết nối mà ít ai cộng đủ.

Cơ sở dữ liệu 29/08/2026 9 phút

Một trigger có thân hàm rỗng làm chèn chậm 35% — và một trigger khác nuốt mất nửa dữ liệu, không báo lỗi

Trigger là đoạn mã chạy tự động mỗi khi dữ liệu thay đổi: tiện vì không thể quên, khó vì nó chạy vô hình. Tôi đo chi phí của nó và dựng lại bốn tình huống nó cho kết quả ngoài dự đoán — gồm một chỗ làm mất nửa dữ liệu mà lệnh vẫn báo thành công.

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

Cách 'kiểm tra rồi ghi' chạy đúng mọi lần tôi thử — rồi sáu tiến trình cùng chạy, nó sai cả 25/25 vòng

'Có thì cập nhật, chưa có thì chèn' là thao tác quen thuộc nhất mà SQL chuẩn không có cú pháp riêng. Cách viết tay chạy đúng khi bạn thử một luồng và hỏng khi có nhiều tiến trình. Tôi đo cả hai — cùng ba cái bẫy và ba tính năng ít dùng của ON CONFLICT.

Cơ sở dữ liệu 29/08/2026 8 phút

Thông lượng tụt tám lần trong mười giây — mà con số trung bình vẫn đẹp như không có gì

Phần trước đo WAL sinh ra bao nhiêu; phần này đo chuyện xảy ra khi PostgreSQL đẩy tất cả xuống đĩa. Kết quả bất ngờ: cấu hình có nhiều checkpoint nhất lại mượt nhất — và con số trung bình mà mọi bảng theo dõi hiển thị giấu sạch mười giây người dùng thấy hệ thống đứng.

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

Gấp 64 lần bộ nhớ cho GROUP BY chỉ nhanh hơn 3% — vì chi phí nằm ở số nhóm, không ở số dòng

GROUP BY dễ viết nhất mà khó đoán chi phí nhất. Tôi đo lượng bộ nhớ nó thật sự dùng và tìm ra: chi phí phụ thuộc số nhóm đầu ra chứ không phải số dòng đầu vào, cho thêm bộ nhớ gần như vô ích, và một chỉ mục cho 2× tốc độ với 0 bộ nhớ.