翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
pg_repack を使用した肥大化の削除
pg_repack
拡張機能を使用すると、最小限のデータベースロックでテーブルとインデックスの肥大化を削除できます。この拡張機能は、データベースインスタンスで作成し、Amazon Elastic Compute Cloud (Amazon EC2) またはデータベースに接続できるコンピュータからpg_repack
クライアント (クライアントバージョンが拡張機能バージョンと一致する) を実行できます。
とは異なりVACUUM FULL
、 pg_repack
はダウンタイムやメンテナンスウィンドウを必要とせず、他のセッションをブロックしません。
pg_repack
は、VACUUM FULL
、、CLUSTER
または が機能REINDEX
しない状況に役立ちます。肥大化したテーブルのデータを含む新しいテーブルを作成し、元のテーブルの変更を追跡して、元のテーブルを新しいテーブルに置き換えます。新しいテーブルの構築中は、元のテーブルに対する読み取りまたは書き込みオペレーションがロックされません。
完全なテーブルpg_repack
またはインデックスに を使用できます。タスクのリストを確認するには、pg_repack ドキュメント
制限:
-
を実行するには
pg_repack
、テーブルにプライマリキーまたは一意のインデックスが必要です。 -
pg_repack
は一時テーブルでは機能しません。 -
pg_repack
は、グローバルインデックスを持つテーブルでは機能しません。 -
pg_repack
が進行中の場合、テーブルに対して DDL オペレーションを実行することはできません。
次の表に、 pg_repack
と の違いを示しますVACUUM FULL
。
|
|
組み込みコマンド |
Amazon EC2 またはローカルコンピュータから実行する拡張機能 |
テーブルでの作業中に |
短時間のみ |
すべてのテーブルで動作 |
プライマリキーと一意のキーのみを持つテーブルで動作します |
テーブルとインデックスによって消費されるストレージの 2 倍が必要です |
テーブルとインデックスによって消費されるストレージの 2 倍が必要です |
テーブルpg_repack
で を実行するには、 コマンドを使用します。
pg_repack -h <host> -d <dbname> --table <tablename> -k
インデックスpg_repack
で を実行するには、 コマンドを使用します。
pg_repack -h <host> -d <dbname> --index <index name>
詳細については、 AWS ブログ記事「Remove bloat from Amazon Aurora and RDS for PostgreSQL with pg_repack
注意
のerror-on-invalid-index
エラーpg_repack
は通常、テーブル上の 1 つ以上のインデックスが破損または無効であることを意味します。 は、再パックプロセス中のデータ整合性のためにインデックスに依存するため、無効なインデックスを持つテーブルでは安全に動作pg_repack
できません。
このエラーは、次の場合に発生します。
インデックスは無効としてマークされます (たとえば、
CREATE INDEX CONCURRENTLY
ステートメントが失敗したため)。インデックスが破損しています (ハードウェアの問題や突然のシャットダウンが原因である可能性があります)。
次のクエリを使用して無効なインデックスを特定し、見つかった場合は最初に削除します。
SELECT indexrelid::regclass, indisvalid FROM pg_index WHERE indrelid = 'orders'::regclass AND NOT indisvalid; Drop the invalid index: DROP INDEX index_name;