Q

Quản trị viên

Là một lập trình viên yêu công nghệ, thích viết blog để chia sẻ kiến thức, kinh nghiệm lập trình và những điều thú vị trong thế giới tech.

1741 bài viết · Website
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 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 6 phút

effective_cache_size trong PostgreSQL: gợi ý cache đổi hẳn kế hoạch mà không tốn 1 byte RAM

effective_cache_size không cấp phát bộ nhớ — nó chỉ là con số cho planner đoán chi phí Index Scan lặp lại. Đo thật: cùng một truy vấn, đặt 4MB planner quét tuần tự 5 triệu dòng mất 408 ms, đặt 32GB planner chọn Nested Loop + Index Scan 15,8 ms — nhanh gấp 26 lần. Vì sao mặc định 4GB thường quá thấp. PostgreSQL 16.

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

maintenance_work_mem trong PostgreSQL: RAM cho VACUUM và CREATE INDEX

maintenance_work_mem là RAM cho VACUUM, CREATE INDEX, REINDEX — tách khỏi work_mem và đặt cao hơn được. Đo thật: đủ RAM giữ danh sách dead tuple thì VACUUM chỉ quét index 1 lần thay vì 58 lần; nhưng tác dụng lên CREATE INDEX lại khiêm tốn. Cách đặt an toàn. PostgreSQL 16.

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

Giao dịch dài giữ bloat: vì sao một tab quên đóng làm phình cả bảng PostgreSQL

Một giao dịch mở lâu giữ xmin horizon, khiến VACUUM không xóa được dead tuple mới hơn nó — kể cả dead tuple do giao dịch khác tạo. Đo thật: bảng phình từ 3,5 MB lên 14 MB với 300k dead tuple không dọn được trong khi một giao dịch REPEATABLE READ còn mở; đóng nó thì VACUUM dọn sạch ngay. Cách tìm thủ phạm và phòng tránh. PostgreSQL 16.