Chỉ tăng max_connections
là một ý tưởng tồi. Bạn cần tăng shared_buffers
và kernel.shmmax
nữa.
Cân nhắc
max_connections
xác định số lượng tối đa các kết nối đồng thời đến máy chủ cơ sở dữ liệu. Giá trị mặc định thường là 100 kết nối.
Trước khi tăng số lượng kết nối, bạn có thể cần mở rộng quy mô triển khai. Nhưng trước đó, bạn nên cân nhắc xem bạn có thực sự cần tăng giới hạn kết nối hay không.
Mỗi kết nối PostgreSQL sử dụng RAM để quản lý kết nối hoặc ứng dụng khách sử dụng nó. Bạn càng có nhiều kết nối, bạn sẽ sử dụng càng nhiều RAM mà thay vào đó có thể được sử dụng để chạy cơ sở dữ liệu.
Một ứng dụng được viết tốt thường không cần nhiều kết nối. Nếu bạn có một ứng dụng cần một số lượng lớn kết nối thì hãy cân nhắc sử dụng một công cụ như pg_bouncer có thể gộp các kết nối cho bạn. Vì mỗi kết nối tiêu tốn RAM, bạn nên tìm cách giảm thiểu việc sử dụng chúng.
Cách tăng kết nối tối đa
1. Tăng max_connection
và shared_buffers
trong /var/lib/pgsql/{version_number}/data/postgresql.conf
thay đổi
max_connections = 100
shared_buffers = 24MB
đến
max_connections = 300
shared_buffers = 80MB
shared_buffers
tham số cấu hình xác định bao nhiêu bộ nhớ là chuyên dụng sang PostgreSQL để sử dụng cho dữ liệu bộ nhớ đệm .
- Nếu bạn có hệ thống có RAM từ 1GB trở lên, giá trị khởi đầu hợp lý cho shared_buffers là 1/4 bộ nhớ trong hệ thống của bạn.
- không chắc bạn sẽ thấy việc sử dụng hơn 40% RAM để hoạt động tốt hơn so với một lượng nhỏ hơn (như 25%)
- Xin lưu ý rằng nếu hệ thống hoặc bản dựng PostgreSQL của bạn là 32 bit, thì việc đặt shared_buffers trên 2 ~ 2,5GB là không thực tế.
- Lưu ý rằng trên Windows, các giá trị lớn cho shared_buffers không có hiệu quả và bạn có thể tìm thấy kết quả tốt hơn khi giữ nó ở mức tương đối thấp và thay vào đó sử dụng bộ nhớ cache của hệ điều hành nhiều hơn. Trên Windows, phạm vi hữu ích là 64MB đến 512MB .
2. Thay đổi kernel.shmmax
Bạn sẽ cần tăng kích thước phân đoạn tối đa của hạt nhân để lớn hơn một chút hơn shared_buffers
.
Trong tệp /etc/sysctl.conf
thiết lập thông số như hình dưới đây. Nó sẽ có hiệu lực khi postgresql
khởi động lại (Dòng sau làm cho hạt nhân tối đa là 96Mb
)
kernel.shmmax=100663296
Tài liệu tham khảo
Kết nối tối đa Postgres và bộ đệm được chia sẻ
Điều chỉnh máy chủ PostgreSQL của bạn