在重载下进行PostgreSQL性能调优

时间:2015-10-10 12:30:54

标签: postgresql system database-administration

我的服务器有以下资源:

[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推向任何其他可能的方向吗?

1 个答案:

答案 0 :(得分:2)

PostgreSQL是基于流程和基于线程的,所以它通常不适用于很多连接。

我会考虑使用像PgBouncer这样的东西。 PgBouncer是PostgreSQL的轻量级连接池。