PostgreSQL connection pool: giới hạn và tránh nghẽn
Connection pool tái sử dụng kết nối database để giảm tạo kết nối lặp và kiểm soát concurrency. Nó không tự tối ưu truy vấn. Nếu tổng pool của mọi instance vượt giới hạn database, thêm máy ứng dụng có thể làm lỗi kết nối tăng.

Connection pool tái sử dụng kết nối database để giảm tạo kết nối lặp và kiểm soát concurrency. Nó không tự tối ưu truy vấn. Nếu tổng pool của mọi instance vượt giới hạn database, thêm máy ứng dụng có thể làm lỗi kết nối tăng.
Connection không phải request hay query
| Khái niệm | Ý nghĩa |
|---|---|
| Client connection | Ứng dụng kết nối tới database hoặc pooler |
| Server connection | Kết nối pooler thực sự giữ tới PostgreSQL |
| Active query | Truy vấn đang thực hiện |
| Idle connection | Kết nối mở nhưng không đang chạy query |
| Pool wait | Request đang chờ có kết nối dùng được |
Đo cả thời gian chờ pool và thời gian query. Request chậm vì pool chờ khác truy vấn chậm do lock/I/O. Giới hạn kết nối phải phối hợp với khả năng xử lý và bộ nhớ server.
Cộng pool của toàn hệ thống
Giả sử mỗi process có pool tối đa 10 connection, ứng dụng có 3 instance và mỗi instance 2 process. Tổng lý thuyết là 10 × 3 × 2 = 60 connection, trước worker, migration, monitoring và truy cập quản trị. Đây là ví dụ kiến trúc; cách pool hoạt động phụ thuộc driver/framework.
Khi autoscale, số instance tăng có thể tăng tổng pool dù request chưa tăng tương ứng. Đặt ngân sách connection toàn hệ thống và giữ khoảng dành cho vận hành theo phiên bản/chính sách PostgreSQL.
Giới hạn PostgreSQL
Tài liệu PostgreSQL mô tả max_connections cùng cơ chế kết nối dự phòng. Không tăng giá trị chỉ để hết lỗi mà chưa tính tài nguyên. Memory của truy vấn, connection và tác vụ nền cần được xem cùng tải thực tế.
Kiểm tra connection bị giữ lâu, transaction chưa kết thúc và lỗi ứng dụng không trả connection về pool. Truy vấn nhanh nhưng mở transaction rất lâu vẫn có thể gây vấn đề cho hệ thống.
PgBouncer và chế độ pooling
PgBouncer có các chế độ session, transaction và statement với đặc tính khác nhau. Transaction pooling trả kết nối server về pool sau transaction nhưng không tương thích tự động với mọi cách dùng trạng thái session. Kiểm tra tính năng ứng dụng, driver và phiên bản pooler trước khi đổi.
Không mặc định prepared statement, temporary state hoặc session setting đều hoạt động giống kết nối trực tiếp. Dùng ma trận tính năng và thử các luồng ứng dụng quan trọng trên đúng bộ phiên bản.
Quy trình chọn pool size
- Đếm instance, process, worker và pool từng thành phần.
- Đo active query, connection idle, wait và transaction kéo dài.
- Đặt giới hạn toàn hệ cùng phần dự phòng quản trị.
- Thử tải với nhiều giá trị pool, quan sát latency và lỗi.
- Kiểm tra khi tăng instance hoặc database restart.
- Ghi timeout, retry và runbook xử lý nghẽn.
Pool quá lớn có thể tăng tranh tài nguyên; quá nhỏ có thể tạo queue. Chọn theo throughput và latency đạt yêu cầu, không theo số user đăng ký. Retry cần giới hạn để tránh khuếch đại lỗi.
Multi-tenant và quyền truy cập
Pool limit có thể hỗ trợ quản lý tài nguyên nhưng không thay authorization. Quyền dữ liệu phải được kiểm tra ở backend và database theo thiết kế. Nếu dùng tenant qua session state, phải xác nhận state không rò giữa request khi pooling; thử truy cập chéo tenant.
Khi thuê máy chủ, gửi tổng process/instance, workload database và số liệu chờ pool. Storage hoặc query tối ưu có thể mang lại lợi ích hơn việc tăng connection limit.
Tăng max_connections luôn tăng tốc?
Không. Nó chỉ nới giới hạn và có thể tăng tranh CPU/RAM; cần đo truy vấn và pool.
Dùng PgBouncer có cần sửa ứng dụng không?
Có thể cần tùy mode, trạng thái session và driver. Phải kiểm thử thay vì mặc định tương thích.
Cần máy chủ cho workload này?
NOC thuemaychu.vn hỗ trợ chọn CPU, GPU và băng thông. PoC trong 24 giờ.
Bài viết liên quan
Máy chủCách chọn cấu hình máy chủ dedicated: CPU, RAM, NVMe, băng thông
Đo bottleneck và tải cao điểm trước khi chọn CPU, RAM, storage hoặc GPU; nghiệm thu bằng workload thực tế.
Cloud VPSDedicated Server hay VPS: khi nào nên thuê máy chủ riêng?
Chọn VPS hay dedicated dựa trên tải, giới hạn dịch vụ, ngân sách và yêu cầu kiểm soát; không mặc định mọi doanh nghiệp cần máy vật lý.
Máy chủMonitoring máy chủ: từ tài nguyên đến lỗi ứng dụng
Monitoring máy chủ cần trả lời hai câu hỏi: người dùng có sử dụng được dịch vụ không và nếu có lỗi thì bottleneck ở đâu. Chỉ nhìn CPU/RAM không đủ phát hiện database sai quyền, chứng chỉ hết hạn hoặc backup đã ngừng nhiều ngày.