【发布时间】:2015-07-15 13:24:37
【问题描述】:
我有一个在本地需要大约 90 秒的 rake 任务。它遍历对象并创建一个大型 PG 插入 SQL,然后在最后执行它。
在 Heroku heroku run rake my_task 上大约需要 1.5 小时(与本地数据相同)。我一直在研究 Heroku 和“One-Off Dynos”,但除了我的应用程序在 Heroku 免费计划中只有一个 web dyno 和 0 个工作人员之外,我找不到太多关于为什么需要这么长时间的信息.
不是插入需要很长时间,而是预先循环(循环没有数据库调用)。
DB 是 PG Hobby-Basic。 导轨 4.2 红宝石 1.9.3p374
【问题讨论】:
-
您在处理大约相同大小的数据库记录吗?
-
@jvnill 是的,数据库是在本地克隆的,相同的数据。
-
你能不能:显示 rake 任务的代码;让我们了解生成了多少对象和插入了多少行;也许是本地查询的
EXPLAIN ANALYZE?请注意,如果您在 Postgres 中根据免费/业余爱好计划做了大量工作,那么 Postgres 可以使用的缓存极少,这可能会影响性能。 -
看看这里 - devcenter.heroku.com/articles/one-off-dynos#one-off-dyno-type - 如果您正在为您的 Web 进程使用
standard-1X或更大的测功机,您可以在更快的测功机上运行一次性任务。请注意,您的数据库可能仍然是瓶颈。使用性能更高的测功机进行测试,看看它是否有所作为(不看数字就很难知道!):) -
@elithrar 切换到 Performance dynos 并运行
heroku run --size=performance rake my_task工作得更快。将您的评论放在答案中,我会将其标记为已解决,再次感谢。
标签: ruby-on-rails heroku rake-task