Ruby on rails 如何处理Postgresql上的大量请求
我托管了一个RubyonRail应用程序(Mastodon),它使用Postgres作为数据存储 我收到了很多请求,这引发了关于池的问题,导致应用程序需要等待在Postgres上发言 我将Pgbouncer用于此配置:Ruby on rails 如何处理Postgresql上的大量请求,ruby-on-rails,ruby,postgresql,Ruby On Rails,Ruby,Postgresql,我托管了一个RubyonRail应用程序(Mastodon),它使用Postgres作为数据存储 我收到了很多请求,这引发了关于池的问题,导致应用程序需要等待在Postgres上发言 我将Pgbouncer用于此配置: max_client_conn = 2000 default_pool_size = 50 我对Postgres进行了如下调整: max_connections = 500 shared_buffers = 512MB effective_cache_size = 1536MB
max_client_conn = 2000
default_pool_size = 50
我对Postgres进行了如下调整:
max_connections = 500
shared_buffers = 512MB
effective_cache_size = 1536MB
work_mem = 1048kB
maintenance_work_mem = 128MB
min_wal_size = 1GB
max_wal_size = 2GB
checkpoint_completion_target = 0.7
wal_buffers = 16MB
default_statistics_target = 100
DB服务器位于带有2G ram的专用VPS上
我在轨道一侧遇到的那种错误:
a connection from the pool within 5.000 seconds (waited 5.000 seconds); all pooled connections were in use
有时请求超时时出错(请求运行时间超过90000毫秒)
My Rail应用程序使用此配置生成工人:
- WEB_CONCURRENCY=4
- MAX_THREADS=10
- DB_POOL=20
你知道如何解决这个繁忙的博士后问题吗?
可能是配置问题
有没有其他方法可以解决这个问题,比如让Postgres成为reads的奴隶
我的请求数量有点超出了我的能力 I.首先调整您的Postgres以适应您的RAM、操作系统、Postgres版本、连接数等。我使用。只需输入VPS的参数和其他选项,并相应地修改postgresql.conf II. 然后查看您的database.yml。通常,它在生产中最多允许5个连接(默认情况下)。尝试增加此数字以满足您的需要:
#config/database.yml
production:
...
pool: 20
将来自I的最大连接数放入池中是有意义的
III.优化数据库查询。修复n+1
查询,使用。Gem可以帮助您确定数据库查询数量的问题