【问题标题】:Rake task takes significantly longer on Heroku than locally在 Heroku 上执行 Rake 任务比在本地花费的时间要长得多
【发布时间】: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


【解决方案1】:

如果您在 Web 进程中使用标准 1X 或更大的测功机,您可以在更快的测功机上运行一次性任务,因为在免费/爱好测功机上使用 Ruby 对约 100k 对象进行排序可能会拉伸它。

本文介绍了基础知识 - https://devcenter.heroku.com/articles/one-off-dynos#one-off-dyno-type 用于设置一次性测功机的测功机尺寸。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多