← Tất cả bài viết

Connection pool HikariCP: cấu hình sao cho đúng

21/07/2026

Mở một kết nối database tốn kém (bắt tay TCP, xác thực, cấp phát tài nguyên). Connection pool giữ sẵn một tập kết nối để tái dùng. Spring Boot dùng HikariCP mặc định — nhanh và nhẹ, nhưng cần cấu hình đúng.

maximumPoolSize: nhỏ hơn bạn nghĩ

Sai lầm phổ biến là đặt pool thật to (100, 200) vì nghĩ càng nhiều kết nối càng nhanh. Thực tế database chỉ xử lý song song hiệu quả một số kết nối giới hạn; pool quá lớn gây tranh chấp, context switch và có thể làm sập database.

Công thức tham khảo (PostgreSQL): connections ≈ ((core_count * 2) + effective_spindle_count). Nhiều hệ thống chạy tốt với pool chỉ 10–20 kết nối mỗi instance.

Các timeout quan trọng

  • connectionTimeout: chờ tối đa để lấy được kết nối từ pool trước khi ném lỗi (mặc định 30s)
  • idleTimeout: kết nối rảnh bao lâu thì bị đóng
  • maxLifetime: tuổi thọ tối đa của một kết nối — nên đặt ngắn hơn timeout phía database/firewall để tránh dùng kết nối đã chết
spring:
  datasource:
    hikari:
      maximum-pool-size: 15
      connection-timeout: 30000
      max-lifetime: 1800000

Chú ý khi scale nhiều instance

Tổng kết nối = pool size × số instance. Chạy 10 instance với pool 20 là 200 kết nối tới database — dễ vượt giới hạn max_connections của PostgreSQL. Tính tổng, đừng chỉ nhìn một instance.

👉 Dùng thử công cụ liên quan trên dev-hub: YAML Formatter — chạy hoàn toàn trong trình duyệt, không gửi dữ liệu lên server.