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

Câu 0,007 ms mỗi lần ngốn gấp ba lần thời gian máy chủ so với câu 118 ms — và vì sao bạn sẽ tối ưu nhầm

Sau năm mươi ba phần đo từng cơ chế, phần này đo cách tìm ra chỗ nào đáng đo. Kết quả đầu tiên đã đủ giật mình: cách xếp hạng phổ biến nhất — theo thời gian mỗi lần — dẫn thẳng tới việc tối ưu nhầm truy vấn, bỏ qua đúng câu đang chiếm nhiều tài nguyên nhất.

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

Một lần mất điện xoá sạch mọi bộ đếm pg_stat — và vì sao con số tuyệt đối của chúng gần như vô nghĩa

pg_stat_statements trả lời 'truy vấn nào tốn nhất'. Các khung nhìn pg_stat_* trả lời câu khác: bảng nào, chỉ mục nào, bộ đệm đang làm gì. Tôi đo chúng nói gì, ba chỗ chúng im lặng — gồm một sự cố xoá sạch mọi bộ đếm — và một dự đoán của tôi bị bác bỏ.

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

Chỉ mục tôi đinh ninh sẽ thắng lại về gần bét — quy trình 5 bước đưa truy vấn từ 684 ms xuống 208 ms

Năm mươi lăm phần trước đo từng cơ chế riêng lẻ; phần này ghép lại thành một quy trình gỡ truy vấn chậm và chạy trên một sự cố dựng sẵn từ đầu tới cuối. Bất ngờ lớn nhất: chỉ mục bao phủ mà ai cũng nghĩ là nhanh nhất lại tệ thứ nhì, còn chỉ mục nhanh nhất cũng là chỉ mục nhỏ nhất.

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

pg_upgrade xong trong 2,4 giây — rồi bộ lập lịch ước sai 66 lần, vì nó cố tình bỏ lại một thứ

Nâng cấp phiên bản lớn là việc mỗi năm làm một lần nên chẳng ai thuộc. Tôi chạy pg_upgrade thật từ PostgreSQL 16 lên 17, đo từng bước — và tìm ra thứ nó mang theo đầy đủ lẫn thứ nó lặng lẽ để lại, đủ khiến máy chủ vừa nâng xong chậm bất thường vài giờ đầu.

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

RLS giấu sạch dòng của phòng khác — nhưng một lỗi trùng khoá tố cáo đúng dòng đang bị giấu

Phân quyền PostgreSQL có bốn lớp, mỗi lớp chặn được một thứ khác nhau. Tôi đo từng lớp trên bảng nhân viên bốn dòng và tìm ra ba chỗ chúng không chặn — chỗ đáng nhớ nhất là một thông báo lỗi khẳng định sự tồn tại của đúng dòng mà chính sách đang cố giấu.

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

Chỉ mục nhỏ hơn B-tree 6.850 lần — nhưng xáo trộn thứ tự dòng một cái là nó chậm hơn cả không có chỉ mục

Đo B-tree, BRIN và GiST trên bảng sự kiện 10 triệu dòng trong PostgreSQL: BRIN chỉ 32 kB, gần như miễn phí lúc ghi, nhưng nó đánh chỉ mục bố cục vật lý chứ không phải dữ liệu — xáo trộn thứ tự dòng là nó chậm 234 lần, và chết hoàn toàn trong im lặng.