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ị đóngmaxLifetime: 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.