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

Bảo trì PostgreSQL: ANALYZE, VACUUM và REINDEX làm gì, khi nào cần

Ba việc giữ database khoẻ: ANALYZE cập nhật thống kê cho planner, VACUUM dọn dead tuple, REINDEX dựng lại index phình. Đo thật: thống kê cũ khiến planner đoán sai 4 lần, VACUUM dọn 1 triệu dead tuple, và một index phình gấp 4 lần được REINDEX về như mới. PostgreSQL 16.

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

Logical replication trong PostgreSQL: nhân bản theo bảng, không phải cả cụm

Logical replication dùng publisher/subscriber để nhân bản chọn lọc từng bảng, cho subscriber ghi được và chạy khác phiên bản. Bài này dựng thật lab sang sub_db: publish 2 trong 3 bảng, đo copy ban đầu, INSERT UPDATE DELETE nhân bản, và bảng không publish thì không sang. PostgreSQL 16.

Lập trình Go 22/09/2026 11 phút

PGO trong Go: compiler dùng profile production để tối ưu, và vì sao benchmark nhỏ không thấy gì

Profile-guided optimization cho compiler dùng profile CPU chạy thật để devirtualize suy đoán những lời gọi interface mà phân tích tĩnh bó tay. Đo thật: PGO devirtualize được h.Chay khi tĩnh không làm được, nhưng benchmark micro gần như không đổi — lợi ích thật là 2-14% trên app lớn. Go 1.23.

Lập trình 22/09/2026 7 phút

Consumer lag: tín hiệu cảnh báo số một của hệ message queue, đo thật qua offset

Hệ message queue có khoẻ không? Đừng nhìn CPU hay throughput — nhìn consumer lag. Bài này đo thật trên Kafka: backlog 200.000 message, consumer chậm, producer thêm 100.000 — lag vọt từ 150.000 lên 250.000 dù consumer vẫn chạy, rồi về 0 khi bắt kịp. LAG = LOG-END-OFFSET trừ CURRENT-OFFSET, và nó là chỉ báo sớm nhất rằng hệ sắp không theo kịp.