Connection pool: 45ms mở kết nối mới vs. 0,2ms mượn lại
Tóm tắt
Mỗi kết nối mới tới database phải qua bắt tay TCP, TLS và xác thực — khoảng 45ms trong video. Connection pool giữ sẵn một nhóm kết nối để mượn lại trong ~0,2ms. Khi lưu lượng vượt số kết nối trong pool, request phải chờ đến lượt.
Ba tình huống
| Tình huống | Thời gian lấy kết nối | Ghi chú |
|---|---|---|
| Không có pool | ~45ms mỗi request | TCP → TLS → AUTH lặp lại mỗi lần |
| Có pool, tải nhẹ | ~0,2ms | Mượn lại kết nối có sẵn, không bắt tay lại |
| Burst 14 request, pool 4 kết nối | 10ms, 20ms, 30ms… | 10 request xếp hàng chờ kết nối rảnh |
Hết burst, các kết nối rảnh bị đóng theo idle timeout.
Áp dụng thế nào?
- Luôn dùng pool cho ứng dụng có lưu lượng ổn định (HikariCP cho Java, pgBouncer cho PostgreSQL, pool có sẵn trong hầu hết ORM).
- Pool to hơn chưa chắc nhanh hơn: database có giới hạn kết nối; quá nhiều kết nối làm DB chậm vì tranh chấp tài nguyên.
- Đo “thời gian chờ lấy kết nối” như một chỉ số riêng — nó tăng là dấu hiệu pool quá nhỏ hoặc query giữ kết nối quá lâu.
- Serverless: mỗi instance có pool riêng dễ làm cạn kết nối DB — dùng proxy như RDS Proxy hoặc pgBouncer.