pg_repack ホームページへようこそ


このプロジェクトでは pg_repackpg_batch の2つのツールを頒布しています。

pg_repack は PostgreSQL のテーブルを再編成するシェルコマンドです。 共有ロックや排他ロックを取得しないため、再編成中であっても行の参照や更新を行うことができます。 このモジュールは CLUSTER や VACUUM FULL コマンドのより良い代替になります。

pg_batch は PostgreSQL のためのSQLジョブ実行プログラムです。 ジョブ一覧生成するスクリプトを SQL として外部から与え、その出力 SQL をジョブとしてシリアルまたはパラレルに実行します。 VACUUM を行うスクリプトが付属しており、"より良い vacuumdb" として利用できます。

この pg_repack プロジェクトは PostgreSQL コミュニティによる pgFoundry の中のプロジェクトです。

Here is an English page.

ドキュメント

実行時間

pg_repack とclusterdb の比較に示します。 断片化のないソートされた状態 (not fragmented) では clusterdb のほうが高速ですが、完全に断片化した状態 (fully fragmented) では pg_repack が大幅に高速です。 一般的に、再編成は断片化が進行した状態で実施されることを考えると、pg_repack は clusterdb よりも実行時間が短いと言えます。

測定環境
大項目 小項目 環境
ハードウェア CPU 2 × Xeon 5160 3.00GHz (Dual core)
メモリ 2GB
ストレージ Ultra320 SCSI, 15000rpm (220GB)
ソフトウェア OS RHEL 5.2 (64bit) 2.6.18-92.el5
DB PostgreSQL 8.3.3
pg_repack 1.0.0
clusterdb clusterdb (PostgreSQL) 8.3.3
データ スキーマ
CREATE TABLE tbl (
 id bigserial PRIMARY KEY,
 seqkey timestamp NOT NULL,
 rndkey timestamp NOT NULL,
 filler char(75) NOT NULL
);
CREATE INDEX idx_seq ON tbl (seqkey);
CREATE INDEX idx_rnd ON tbl (rndkey);
件数 1650万件 (約2GB)