【发布时间】:2015-10-10 12:30:53
【问题描述】:
我的服务器有以下资源:
[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 配置:
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 推向任何其他可能的方向吗?
【问题讨论】:
-
16GB/8 核并不是真正的“大盒子”——也绝对不是“高端”数据库服务器。这比装备精良的 PC 或笔记本电脑还要大。但是你真的应该像马特建议的那样研究连接池。在您的应用程序中或使用类似 pgBouncer 或 pgPool 的东西
标签: postgresql system database-administration