データセットの数に応じて、1つのオプションは、データセットごとにテーブルを分割することです。
データセットが更新されるとBEGIN
、新しいトランザクション、TRUNCATE
テーブル、COPY
そこへの新しいデータ、およびCOMMIT
。PostgreSQLは、最適化しているCOPY
をされているテーブルにINGのTRUNCATE
D と同じトランザクションでは、使用している場合ははるかに少ないI / Oを行いますwal_level = minimal
(デフォルト)。
パーティション分割および切り捨てができない場合(たとえば、数十または数十万のデータセットを処理していて、テーブルが多すぎる場合)、代わりに、autovacuumを最大にして、できるだけ多く実行するようにします。に基づいて、削除したものに適切なインデックスがあることを確認し、やや通常のパフォーマンスに備えてください。
クラッシュの安全性が必要ない場合- システムクラッシュ後のテーブルが空であってもかまいません-としてテーブルを作成することもできますUNLOGGED
。これにより、I / Oコストを大幅に節約できます。
システムクラッシュ後、バックアップからセットアップ全体を復元する必要がない場合は、さらに一歩進んで設定することもできますfsync=off
。これにより、基本的にPostgreSQLに「クラッシュの安全性に煩わされることはありません。適切なバックアップがあります。クラッシュ後に自分のデータが完全に完全に回復できなくなっても気にしないでくださいinitdb
。データベースを再び使用できるようになる前に、喜んで再利用できます。」
これについては、高速テスト用にPostgreSQLを最適化することについて、Stack Overflowの同様のスレッドで詳しく説明しました。これは、ホストOSのチューニング、unlogged
テーブルを使用していない場合はWALを別のディスクに分離すること、チェックポインタの調整などについて言及しています。
Pgのドキュメントには、データの高速読み込みと永続的でない設定に関する情報も含まれています。