私たちは、8,000万行のテーブルのUUIDタイプカラムにインデックスを追加するために、postgresを使ってRuby on Railsの移行を使用しています。8000万行テーブルのUUIDのインデックス
concurrently
パターンと、disable_ddl_transaction!
パターンに従いました。しかし、導入直後、移行中に、重度の減速に気づき始め、最終的にテーブルが応答を停止しました。私たちは途中で移行をキャンセルしましたが、テーブルは最終的に回復しましたが、テーブルの応答を停止させた原因はまだ分かりません。
私たちはAWS RDSを使用しており、すべての統計情報を確認していますが、CPUまたはI/Oが超過しているようには見えません。
私の質問は、この移行中に減速/停止の原因となった可能性がある他の考慮事項は何ですか?
他のテーブルが応答していましたが、アプリケーションがロードされましたが、この1つのテーブルはちょうど立ち往生していました。ここ
移行です:移行の
class AddIndexToPublicId < ActiveRecord::Migration
disable_ddl_transaction!
def up
change_column :table1, :public_id, :uuid, null: false
change_column :table2, :public_id, :uuid, null: false
change_column :table3, :public_id, :uuid, null: false
add_index :table1, :public_id, unique: true, algorithm: :concurrently
add_index :table2, :public_id, unique: true, algorithm: :concurrently
add_index :table3, :public_id, unique: true, algorithm: :concurrently
end
def down
remove_index :table1, :public_id
remove_index :table2, :public_id
remove_index :table3, :public_id
change_column :table1, :public_id, :uuid, null: true
change_column :table2, :public_id, :uuid, null: true
change_column :table3, :public_id, :uuid, null: true
end
end
change_column
一部が正常に動作するように見えたが、インデックスは、私たちのschema.rbにはないところ、我々は今、奇妙な状態にしているので、終了しませんでした私たちのdbにマッチします。
私たちはもう少し学んだ。私たちは実際には 'null:false'部分を過ぎたことはありません。私たちは移行を再開し、ついにそれを過ぎました。その後、移行を終えてtable1にインデックスを追加すると、ダウンタイムや速度低下が発生しました。私たちはIO/CPUを見て、何も突っ込んでいませんでした。 –