Table phình dù đã xoá sạch — VACUUM trong PostgreSQL
Xoá 20 triệu dòng mà đĩa không nhả: dead tuple, bloat và cách chỉnh autovacuum cho bảng lớn trong PostgreSQL.
THE ENGINEERING JOURNAL
Các bài viết về optimize.
Xoá 20 triệu dòng mà đĩa không nhả: dead tuple, bloat và cách chỉnh autovacuum cho bảng lớn trong PostgreSQL.
OFFSET càng sâu càng chậm vì DB vẫn phải quét qua từng dòng. Keyset/cursor pagination chỉ tốn một lần index seek — kèm code Go và SQL thật.
Bật gzip chưa chắc đã nhanh. So sánh gzip, Brotli, zstd, cái bẫy Vary header, middleware nén trong Go và 3 cạm bẫy hay gặp.
Cache-aside tưởng đơn giản mà dính Cache Stampede, thiếu TTL jitter, ghi nhầm thứ tự. 3 cái bẫy làm chậm hệ thống dù đã bọc Redis.
Vì sao mở kết nối PostgreSQL mỗi lần request là chậm? Học cách tinh chỉnh connection pool trong Go: MaxOpenConns, MaxIdleConns, ConnMaxLifetime và các cái bẫy dễ dính.
Hướng dẫn dùng Idempotency-Key + unique constraint để API retry an toàn, không ghi trùng order hay thanh toán 2 lần — kèm code Go + PostgreSQL.
Tìm hiểu pattern Cache-Aside với Redis: cách đọc/ghi cache đúng chuẩn, tránh cache stampede, kèm code ví dụ và kinh nghiệm triển khai thực tế.
Tối ưu SQL query bằng EXPLAIN ANALYZE: đọc execution plan, tìm sequential scan, thêm index đúng chỗ, biến query 3 giây thành 30ms.
Connection pooling tái sử dụng kết nối database, giảm latency và tránh lỗi 'too many connections'. Kinh nghiệm config pool đúng cách trong Go.
Thundering herd là gì? Khi một key cache 'nóng' hết hạn, hàng chục nghìn request cùng đổ vào database. Kèm cách chặn: singleflight, Redis lock và jitter TTL.