TOP書籍連動> VACUUMを使いこなす
まるごと PostgreSQL!
PostgreSQLチューニング実践テクニック

第3回:VACUUMの活用によるチューニング

著者:石井達夫(ISHII, Tatsuo)   2005/6/6
1   2  次のページ
VACUUMを使いこなす

   VACUUMは他のデータベースにはないPostgreSQL固有のコマンドであり、使い方次第でPostgreSQLの性能を左右する重要な役割を持ちます。

   PostgreSQLでは、削除や更新が行われても古い行は消えません。VACUUMコマンドは、このような古い行の中から、どのトランザクションからも参照されていない安全に再利用できる行を探して、FSM(Free Space Map)という共有メモリ上のデータ構造にその位置と大きさを記録します。追加や更新など、新しく行を追加する場合はまずFSMを検索して、新しいデータを保管するのに適当な大きさの行が見つかればそれが再利用されます(図3)。

VACUUMと行の再利用
図3:VACUUMと行の再利用



   定期的にVACUUMを実行することにより、行が効率よく再利用されるようになります。これによって、テーブルの物理的な肥大化を抑え、データベースのパフォーマンスを維持できるわけです。


FSMのサイズを適切に設定する

   FSMの大きさはpostgresql.confのmax_fsm_pagesで指定します。

   FSMの大きさが不十分であると、その情報をFSMに記録できない行が発生して、再利用できない行が残ってしまいます。この場合、徐々にデータベースクラスタのサイズが大きくなっていき、パフォーマンスが低下します。FSMが足りているかどうかは、全データベースに対してVACUUMを実行するとわかります(図4)。

$ vacuumdb -a -v
(中略)
INFO: free space map: 13 reLations, 1447 pages stored; 1808 total pages needed
DETAIL: ALLocated JSM size: 100 reLations + 1601 pages = 19KB shared memory.
VACUUM

図4:必要なFMSサイズの確認


   図4を見ると「1808 total pages needed」とあり、必要なFSMは1808であることがわかります。一方、2行目(またはpostgresql.confのmax_fsm_pagesパラメータ)を見ると、実際には1601しかFSMがありません。したがって、この例ではFSMが不足しています。これでは、再利用できない領域が生じてしまうので、次のような対策が必要です。

  1. max_fsm_pagesを増やして(この例では1808以上)にしてVACUUMを実行する
  2. VACUUM FULLを実行して空き領域をなくしてから、もっと頻繁にVACUUMを実行するようにする

1   2  次のページ

書籍紹介
まるごと PostgreSQL! Vol.1
まるごと PostgreSQL! Vol.1 日本での市場シェアNo.1(オープンソースRDBMS部門)データベースソフトPostgreSQLの最新情報を、開発メンバーを含む豪華執筆陣が多面的かつ詳細に解説します。PostgreSQL用クラスタリング/レプリケーションソフト、PostgreSQL⇔Oracle移行、PostgreSQLによる大規模サイト構築法、新バージョンPostgreSQL 8.0先行レビュー、PostgreSQL用.NETデータプロバイダ等々、他では読めない貴重な記事が満載です。

発売日:2004/12/08発売
定価:\1,890(本体 \1,800+税)
石井達夫
著者プロフィール
石井達夫(ISHII, Tatsuo)
PostgreSQLの開発者、エバンジェリスト。本業でもPostgreSQLによるビジネスに関わっている。著書に「PostgreSQL完全攻略ガイド」「PHPxPostgreSQLで作る最強Webシステム」(技術評論社)などがある。


INDEX
第3回:VACUUMの活用によるチューニング
VACUUMを使いこなす
  適切なFSMのサイズ