Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何处理Postgresql上的大量请求_Ruby On Rails_Ruby_Postgresql - Fatal编程技术网

Ruby on rails 如何处理Postgresql上的大量请求

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

我托管了一个RubyonRail应用程序(Mastodon),它使用Postgres作为数据存储

我收到了很多请求,这引发了关于池的问题,导致应用程序需要等待在Postgres上发言

我将Pgbouncer用于此配置:

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可以帮助您确定数据库查询数量的问题