【问题标题】:PostgreSQL performance tuning under heavy loadPostgreSQL 重负载下的性能调优
【发布时间】: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


【解决方案1】:

PostgreSQL 是基于进程与基于线程的,因此它通常不能很好地处理大量连接。

我会考虑使用 PgBouncer 之类的东西。 PgBouncer 是 PostgreSQL 的轻量级连接池。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多