我们在处理高峰时段到我们的数据库服务器的流量时遇到问题。我们正在研究改进硬件(请参阅有关该方面的问题),但我们也希望进行池配置和服务器调整。
我们正在开发的应用程序是一款用于智能手机的回合制多人游戏,其后端由Rails和unicorn和PostgreSQL 9.1作为数据库组成。我们目前有 600 000 名注册用户,并且由于游戏状态存储在数据库中,每隔几秒钟就会进行数千次写入。我们使用PgBadger分析了来自PostgreSQL的日志文件,在关键时间我们得到了很多
FATAL: remaining connection slots are reserved for non-replication superuser connections
Run Code Online (Sandbox Code Playgroud)
解决这个问题的天真解决方案是增加postgresql.conf 中的max_connections(当前为 100) 。我已经阅读了http://wiki.postgresql.org/wiki/Number_Of_Database_Connections这表明这可能不是正确的做法。在前面提到的文章中,它提到了在 max_connections 和pool size之间找到最佳位置。
为了找到这个甜蜜点,可以做些什么?是否有任何好的工具可以测量max_connections和pool size 的不同值的 I/O 性能?
我们当前的设置是 4 个游戏服务器,每个服务器有 16 个独角兽工人,池大小为 5。
以下是我们使用的非默认 postgres 设置:
version | PostgreSQL 9.1.5 on x86_64-unknown-linux-gnu,compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit
checkpoint_completion_target | 0.9
checkpoint_segments | 60
checkpoint_timeout | …
Run Code Online (Sandbox Code Playgroud) 我们现在在处理高峰时段服务器的密集流量时遇到问题;请参阅有关调整 DB 的相关问题。目前,我们正在使用较小的云服务作为服务器托管。目前,我们正在研究将我们的服务器迁移到 AWS 的可能性。我们遇到的问题主要与我们的数据库服务器有关,因此我们希望拥有比我们现在使用的要好得多的 AWS 实例。
数据库服务器所在云服务器的统计信息如下:
在选择用于 PostgreSQL 数据库服务器的亚马逊实例时,您有什么特别需要考虑的吗?