Azure Database for PostgreSQL での DELETE 後にストレージを理解し、回復する
PostgreSQL のマルチバージョン並行性制御 (MVCC) は、リーダーとライターがブロックなしで同時に操作できるようにします。行が削除されると、PostgreSQL はディスクから物理的に削除するのではなく、デッドタプルとしてマークします。これにより、進行中のトランザクションのデータ整合性が確保されますが、テーブルファイルのサイズは変更されません。その結果、論理的な行数が減少しても、Azure Monitor のストレージグラフは高い消費量を示し続けます。更新によって作成された古い行バージョンも、アクティブなトランザクションで必要とされなくなるまでスペースを占有します。デッドタプルは、不要になった行バージョンであり、蓄積する可能性があり、バキューム操作によるクリーンアップが必要です。頻繁なデータ変更により、テーブルとインデックスのブロートが発生する可能性があります。標準の VACUUM は、内部スペースを再利用のために回収しますが、テーブルファイルを縮小しません。VACUUM FULL は、テーブルをコンパクトなファイルに書き直して物理的に縮小しますが、排他ロックが必要です。pg_repack は、テーブルとインデックスの圧縮のための、よりブロックの少ない代替手段を提供します。パーティショニングは、個々の行を削除するのではなく、パーティション全体を削除することによって、履歴データを管理するためのプロアクティブなアプローチです。一時ファイルからの未使用スペースは、クエリ完了後に自動的に回収されます。Azure Database for PostgreSQL Flexible Server は、ストレージの増加は許可しますが、削減は許可しません。ストレージコストはプロビジョニングされた容量に基づいており、データを削除しても請求額が自動的に下がるわけではありません。ベストプラクティスには、バッチ削除、主要メトリクスの監視、パーティショニングの使用、およびストレージ容量のプロアクティブな計画が含まれます。