【问题标题】:Rails 4 concurrent database indexesRails 4 并发数据库索引
【发布时间】:2013-10-28 10:19:02
【问题描述】:

我只是想知道在 Rails 中创建并发索引时的正确行为是什么。

我在我的迁移文件中使用它:

disable_ddl_transaction!

def change
    add_index :table_name, :field_name, algorithm: :concurrently
end

这应该创建一个 postgres 并发索引。

我的问题是:在运行rake db:migrate 时等待创建索引是正确的行为吗?我的意思是,迁移将等到创建索引?或者它应该结束并委派 postgres 这个责任?

附:这是一个非常大的索引。

【问题讨论】:

  • 您是否为此使用了特殊的宝石?
  • 没有。这是 Rails 4 @beerlington 内置的。尽管如此,我已经测试了对我正在为其创建索引的表的访问。我可以在任务运行时读写(大约需要 2 分钟)。这告诉我并发创建工作正常,但我只是想确定一下。

标签: ruby-on-rails postgresql concurrency rails-migrations database-indexes


【解决方案1】:

我发现这是正确的行为。 无论迁移正在等待,索引都会按预期同时创建。

在创建时允许写入和读取。

【讨论】:

  • 这对我来说并没有像预期的那样工作。在 Rails 4.0.8 上索引 1000 万行锁定了数据库。
  • @Ponny 对于 Rails 4.0.8 他们在 ActiveRecord 中做了一些更改,但涉及一些数据类型。这应该仍然适用于该版本。我最近才在 4.0.5 上做的
  • 发现问题。正在添加列和多个索引。一些阅读建议我将并发索引放在自己的迁移中。然后在 SSD 上的 3000 万行上运行良好。花了 20 分钟,没有问题/锁定。
  • @Ponny 太棒了!是的,将索引放在他们自己的迁移中是一个很好的做法。如果它们是并发索引,则更多。
猜你喜欢
  • 1970-01-01
  • 2015-02-19
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
相关资源
最近更新 更多