我的服务器有以下资源:
[postgres@srv2813 ~]$ free -m
total used free shared buffers cached
Mem: 15929 15118 810 142 12 219
-/+ buffers/cache: 14885 1043
Swap: 8031 2007 6024
[postgres@srv2813 ~]$ cat /proc/cpuinfo | grep processor | wc -l
8
[root@srv2813 postgres]# sysctl kernel.shmall
kernel.shmall = 4194304
[root@srv2813 postgres]# sysctl kernel.shmmax
kernel.shmmax = 17179869184
和我的PostgreSQL conf:
default_statistics_target = 100
maintenance_work_mem = 1GB
checkpoint_completion_target = 0.9
effective_cache_size = 12GB
work_mem = 32MB
wal_buffers = 16MB
shared_buffers = 3840MB
max_connections = 500
fsync = off
temp_buffers=32MB
但它的“连接太多”错误。当发生这种情况时,网络服务器的nginx_status
页面会显示大约500个活动连接。服务器托管api服务器,因此每个“http请求”总是启动数据库“读取”。它不是一个“写”重的东西,而是非常“读”重。
我可能会最大化我们的服务器,但考虑到应用程序的“只读”性质,我仍然希望从16G / 8核心盒中获得更多。我可以将PostgreSQL推向任何其他可能的方向吗?
答案 0 :(得分:2)
PostgreSQL是基于流程和基于线程的,所以它通常不适用于很多连接。
我会考虑使用像PgBouncer这样的东西。 PgBouncer是PostgreSQL的轻量级连接池。