Open1

CREATE INDEX CONCURRENTLYは通常のインデックス作成よりも書き込みのある環境で遅い

ryohma0510ryohma0510

DBマイグーションする時に、これが思ったよりも遅くて、障害になった
ローカル環境やQA環境での検証では書き込みが少ないので、ここまで遅いことに気づけなかった。

https://www.postgresql.jp/document/9.3/html/sql-createindex.html#SQL-CREATEINDEX-CONCURRENTLY

このオプションを使うと、PostgreSQLはテーブルを2回スキャンしなければなりません。 さらに、潜在的にそのインデックスを使用する可能性がある、実行中のすべてのトランザクションが終わるまで待機しなければなりません。 したがって、この方式は通常の方式よりも総作業時間がかかり、また、完了するまでの時間が非常に長くなります。 しかし、インデックス作成中に通常の操作を行い続けることができますので、この方式は運用環境での新規インデックス作成に有用です。 もちろん、インデックス作成によりCPUや入出力に負荷がかかりますので、他の操作が低速になる可能性があります。