ウォーム スタンバイ データベースを作成するために、PostgreSQLでWrite Ahead Logs (WAL)のログ配布を検討しています。ただし、データベースには毎日大量の INSERT/DELETE を受け取るテーブルが 1 つありますが、そのテーブル内のデータを保護することは気にしません。生成される WAL の量を減らすために、1 つのテーブルでのアクティビティが WAL に記録されないようにする方法はありますか?
4 に答える
この古い質問に出くわしましたが、現在はより良い答えがあります。Postgres 9.1 では、DML の変更を WAL に記録しないテーブルである "Unlogged Tables" が導入されました。詳細についてはドキュメントを参照してください。ただし、少なくとも現在、この問題の解決策があります。
Waiting for 9.1 - UNLOGGED tables by depesz および9.1 docsを参照してください。
残念ながら、あるとは思いません。WAL ロギングは、テーブル レベルよりはるかに低いページ レベルで動作し、どのページがどのテーブルのデータを保持しているかさえわかりません。実際、WAL ファイルは、どのページがどのデータベースに属しているかさえ知りません。
アクティビティの多いテーブルを PostgreSQL のまったく別のインスタンスに移動することを検討してください。これは思い切った方法のように思えますが、そのアクティビティが WAL ファイルに表示されるのを避けるための別の方法を頭の中で考えることができません。
私自身の質問に1つのオプションを提供すること。一時テーブルがあります-「一時テーブルはセッションの終了時に、またはオプションで現在のトランザクションの終了時に自動的に削除されます(以下のON COMMITを参照)」-これはWALを生成しないと思います。それでも、テーブルの作成と設計はコードに含める必要があるため、これは理想的ではない可能性があります。
このようなユースケースでは、memcachedを検討します。安価なマシンの束に負荷を分散することもできます。