Cơ sở dữ liệu 22/09/2026 5 phút

HOT update trong PostgreSQL: cập nhật một dòng mà không đụng index

HOT (Heap-Only Tuple) cho UPDATE tạo phiên bản mới ngay trong cùng trang, không cập nhật index nào — nếu không đổi cột được index và trang còn chỗ. Đo thật: update cột không index đạt 100 phần trăm HOT giữ index nguyên, update cột có index 0 phần trăm HOT làm index phình. PostgreSQL 16.

Cơ sở dữ liệu 22/09/2026 5 phút

fillfactor trong PostgreSQL: chừa chỗ trong trang để HOT hoạt động

fillfactor chừa phần trăm chỗ trống trong mỗi trang khi INSERT, để phiên bản UPDATE mới ở lại cùng trang và HOT phát huy. Đo thật: fillfactor 100 cho 0 phần trăm HOT và phình 6 lần, fillfactor 70 cho 72 phần trăm HOT chỉ phình 2,4 lần. Cách chọn giá trị theo tải ghi. PostgreSQL 16.

Cơ sở dữ liệu 22/09/2026 6 phút

Transaction ID wraparound trong PostgreSQL: hiểm họa 32-bit và VACUUM freeze

Transaction id là số 32-bit, cửa sổ dùng được chỉ khoảng 2 tỉ. Nếu dòng cũ không được freeze trước khi bộ đếm tràn, chúng bỗng trông như tương lai và biến mất — thảm họa. Đo thật cách theo dõi age(datfrozenxid) và vì sao VACUUM bắt buộc kể cả bảng chỉ đọc. PostgreSQL 16.

Cơ sở dữ liệu 22/09/2026 5 phút

pgstattuple trong PostgreSQL: đo bloat chính xác, và bản xấp xỉ nhanh

pgstattuple quét cả bảng để cho con số bloat chính xác qua free_percent. Đo thật: bảng 297 MB chỉ 30 phần trăm là dữ liệu sống, 64,8 phần trăm là chỗ trống; bản approx dùng visibility map nhanh hơn 25 lần với sai số nhỏ; và pgstatindex đo bloat index riêng. PostgreSQL 16.

Cơ sở dữ liệu 22/09/2026 5 phút

pg_repack trong PostgreSQL: dọn bloat online mà không khóa bảng

pg_repack thu nhỏ bảng bloat như VACUUM FULL nhưng chạy online — đọc và ghi không bị chặn. Đo thật: repack một bảng 1894 MB xuống 631 MB trong khi một SELECT đồng thời vẫn trả về 2,67 triệu dòng, thay vì bị hủy như với VACUUM FULL. Cơ chế năm bước và lưu ý production. PostgreSQL 16.

Cơ sở dữ liệu 22/09/2026 5 phút

shared_buffers trong PostgreSQL: đặt bao nhiêu, và vì sao không phải càng nhiều càng tốt

shared_buffers là bộ nhớ đệm chính của PostgreSQL, mặc định 128MB thường quá nhỏ. Đo thật: bảng lớn hơn nó chỉ đạt 37 phần trăm cache hit, nhưng tập nóng vẫn ở lại. Quy tắc 25 phần trăm RAM và vì sao đặt lớn hơn lãng phí vì double buffering với OS cache. PostgreSQL 16.