永続性とは、サーバがクラッシュしたり電源が落ちたりしたとしても、コミットされたトランザクションが記録されていることを保証するデータベースの機能です。 しかし、永続性はデータベースに多くのオーバーヘッドを与えます。 このためこの保証を必要としないサイトでは、PostgreSQLをかなり高速に実行するように設定することができます。 以下に、こうした状況で性能を向上させるために行うことができる設定変更を示します。 後述の注意を除き、データベースソフトウェアがクラッシュした場合でも、永続性は保証されています。 突然のオペレーティングシステムのクラッシュだけが、この設定を使用した時のデータ損失、破損の危険性を引き起こします。
データベースクラスタのデータディレクトリをメモリ上のファイルシステム(つまりRAMディスク)に設定します。 これはすべてのデータベースによるディスクI/Oを取り除きますが、データ量が利用可能なメモリ(およびスワップも使われるかもしれません)量までに制限されます。
fsyncを無効にします。 データをディスクに吐き出す必要がありません。
synchronous_commitを無効にします。 コミット毎にディスクにWAL書き出しを強制する必要がありません。 この設定は、データベースがクラッシュした場合、トランザクション損失(データ破損ではありません)の危険性があります。
full_page_writesを無効にします。 部分的なページ書き出しから保護する必要がありません。
max_wal_sizeおよびcheckpoint_timeoutを増加させます。
これによりチェックポイントの頻度が減少しますが、/pg_wal
で必要とする容量が増加します。
WAL書き出しを回避するためには、テーブルがクラッシュに対して安全ではなくなりますが、ログを取らないテーブルを作成してください。