在生产 Rails 应用程序中向大表添加索引然后迁移后会发生什么?

sli*_*000 2 postgresql activerecord ruby-on-rails

在 Heroku 上使用 Postgres 运行的 Rails 3.2 应用程序。

我添加了一个索引 add_index :lines, :event_id

事件have_many线。大约有 200 万行和一百万个事件。

我推到 Heroku 并迁移。

需要时间吗?一开始它会减慢速度吗?

Sla*_*a.K 5

它会阻止对lines表的插入、更新和删除操作,直到索引构建完成。所以是的,如果您没有同时添加索引,那么它可能会对您的 heroku 数据库产生严重影响。

对于零停机时间迁移,同时创建索引。在 ActiveRecord 4 或更高版本中,可以按如下方式完成:

class AddIndexToAsksActive < ActiveRecord::Migration
  disable_ddl_transaction!

  def change
    add_index :asks, :active, algorithm: :concurrently
  end
end
Run Code Online (Sandbox Code Playgroud)

这是一篇关于这个主题的好文章