Ruby on rails Sidekiq并发和数据库连接池
我的问题是:每天晚上,我都要处理大约5万份背景工作,平均每个工作60秒。这些工作基本上是调用Facebook、Instagram和Twitter API来收集用户的帖子并保存在我的数据库中。这些作业由sidekiq处理 起初,我的设置是:Ruby on rails Sidekiq并发和数据库连接池,ruby-on-rails,postgresql,heroku,activerecord,sidekiq,Ruby On Rails,Postgresql,Heroku,Activerecord,Sidekiq,我的问题是:每天晚上,我都要处理大约5万份背景工作,平均每个工作60秒。这些工作基本上是调用Facebook、Instagram和Twitter API来收集用户的帖子并保存在我的数据库中。这些作业由sidekiq处理 起初,我的设置是: :并发:在sidekiq.yml pool:5在我的数据库中。yml RAILS\u MAX\u THREADS在我的Web服务器(puma)配置中设置为5 我的理解是: 我的web服务器(rails s)将使用最多5个线程,因此最多可以连接到我的数据库
:并发:在
sidekiq.yml
在我的pool:5
数据库中。yml
在我的Web服务器(puma)配置中设置为5RAILS\u MAX\u THREADS
- 我的web服务器(
)将使用最多5个线程,因此最多可以连接到我的数据库5个连接,这是正常的,因为连接池设置为5rails s
- 我的sidekiq进程将使用5个线程(因为并发性设置为5),这也可以,因为连接池设置为5
:并发:在
sidekiq.yml
在我的pool:25
数据库中。yml
在我的Web服务器(puma)配置中设置为5RAILS\u MAX\u THREADS
- 我对rails
connectiondatabase.yml
和sidekiqpool
并发性的理解是否正确
- 设置这些参数的正确方法是什么
我的建议是打开日志并查看数据,您的员工在哪里花费的时间最多?它是不是在网络层(不太可能),它是否在等待访问核心?从数据存储读取/写入?您的机器正在交换吗?不是硬件/网络人员,但最终这是在您的硬件之上。你们有多少个处理器?例如,如果您有四个处理器,那么五个线程可能均匀分布在它们之间。当您将线程数增加到25个时,最好的情况是,每个处理器运行6个线程。我会逐渐增加线程,从应用程序一直到硬件检查统计数据,以查看瓶颈发生的时间和地点。这可能对您有用