危険察知○×難易度 標準

状況

本番の PostgreSQL で、数千万行の orders にインデックスを追加する手順を読み合わせている。

PostgreSQL の CREATE INDEX は CONCURRENTLY を付けなくても、作成中の書き込みを止めない。

正答

× 誤り

解説

PostgreSQL の通常の CREATE INDEX は、作成が終わるまでテーブルへの書き込み(INSERT・UPDATE・DELETE)をブロックする。読み取りは続けられるが、大きな表では数分〜数十分書き込みが止まり、アプリはタイムアウトする。CREATE INDEX CONCURRENTLY なら書き込みを止めずに作れるが、時間がかかり、トランザクションの中では実行できず、失敗すると無効なインデックスが残る。MySQL も方式によってロックの程度が違うので、DB ごとにドキュメントで確かめる。

参考: www.postgresql.org

sqlindexlockpostgresql

この問題を含む 危険察知 のテストを制限時間つきで解く

危険察知クイズへ