Bỏ qua đến nội dung chính
Backend1 năm trước15 phut doc9.5k luot xem

Hướng dẫn tối ưu PostgreSQL cho hệ thống có 10 triệu record

Case study thực tế từ một dự án e-commerce — query từ 8 giây xuống 80ms qua việc đánh index, partition và caching.

Tây Du Code

Tây Du Code

Developer

Khách hàng của mình gặp vấn đề: query danh sách đơn hàng chậm hơn 8 giây khi data đạt 10 triệu record. Đây là quá trình mình tối ưu, đưa thời gian xuống 80ms.

**Bước 1: Đo đạc**. Dùng pg_stat_statements để tìm các query chậm nhất. Phân tích EXPLAIN ANALYZE để hiểu query plan.

**Bước 2: Đánh index đúng**. Phần lớn query chậm do thiếu index trên cột filter và join. Tạo composite index theo thứ tự (most_selective_first).

**Bước 3: Partition theo thời gian**. Bảng orders được partition theo tháng (RANGE partitioning). Query chỉ trên 1-2 partition gần nhất, thay vì scan cả bảng.

**Bước 4: Materialized view cho dashboard**. Các thống kê tổng hợp được tính trước trong materialized view, refresh định kỳ.

**Bước 5: Connection pooling**. Dùng PgBouncer ở mode transaction để giảm overhead kết nối.

Kết quả: query từ 8s → 80ms, throughput tăng 60x.

Bai viet lien quan