2
PostgreSQLでの一括更新パフォーマンスの最適化
Ubuntu 12.04でPG 9.1を使用します。 現在、データベースで次の形式の多数のUPDATEステートメントを実行するのに最大24時間かかります。 UPDATE table SET field1 = constant1, field2 = constant2, ... WHERE id = constid (IDで識別されるオブジェクトのフィールドを上書きしているだけです。)値は外部データソースから取得されます(テーブル内のDBにはまだありません)。 テーブルにはそれぞれ少数のインデックスがあり、外部キー制約はありません。最後までCOMMITは行われません。 pg_dumpデータベース全体をインポートするには2時間かかります。これは、合理的に対象とすべきベースラインのようです。 PostgreSQLのデータセットを何らかの方法で再インポートするカスタムプログラムを作成する以外に、バルクUPDATEパフォーマンスをインポートのパフォーマンスに近づけるためにできることはありますか?(これは、ログ構造化されたマージツリーがうまく処理できると信じている領域ですが、PostgreSQL内でできることはないかと考えています。) いくつかのアイデア: すべての非IDインデックスを削除し、その後再構築しますか? checkpoint_segmentsを増やしますが、これは実際に長期的なスループットの持続に役立ちますか? ここで述べたテクニックを使用しますか?(新しいデータをテーブルとしてロードし、新しいデータにIDが見つからない古いデータを「マージ」する) 基本的に試してみることがたくさんありますが、最も効果的なものが何か、他のことを見落としているかどうかはわかりません。今後数日間は実験に費やしますが、ここでも同様に質問すると思いました。 テーブルには同時ロードがありますが、読み取り専用です。