English


Full Page Write 改善プロジェクトにようこそ


このプロダクトの目的は、PostgreSQLのアーカイブログのサイズを小さくすることです。 サイズ縮小は、WALのアーカイブ (archive_command) を行う際に " removable" と マークされている (PostgreSQL 8.3 で導入されました) バックアップブロック (full page write) を、対応する増分ログで置き換えることで行います。

Full Page Write 改善プロジェクトは PostgreSQL コミュニティ のプロジェクトであって、pgFoundry のプロジェクトの一つです。 これは NTT のオープンソースソフトウェアセンタで行っております。

このプロジェクトの PgFoundry のページは http://pgfoundry.org/projects/pglesslog にあります。 このページには、 downloads, documentation, bug reports, mailing lists その他の情報があります。

英語版ページはこちら


README

lesslog とは ?

Lesslog は、PostgreSQLのアーカイブログを圧縮してサイズを小さくするツール群です。 Lesslog は、次のプログラムで構成されています。

  1. pg_compresslog
  2. このプログラムは、WALをアーカイブする際にWALのサイズを小さくするの に用います。これは、WALレコード中の full page write (物理ログ)を、 対応する増分ログ (論理ログ) で置き換えることで行います。このような 置き換えは、"removable" とマークされtれいるWALレコードに対してのみ 行います。このマークの意味は、PostgreSQL の xlog.c のソースファイ ルに説明があります。 増分ログは full page write に比べて非常にサイズが小さいので、この プログラムによってWALファイルをアーカイブする際にそのサイズを小さ くすることができます。 このコマンドは、postgresql.conf での archive_command として指定し ます。 この子万度では、ページサイズを通常の8kB から 16MB に変更することで、 ページヘッダも取り除くようにしています。これらの情報は、 pg_decompresslog で復元することができます。

  3. pg_decompresslog
  4. このコマンドは pg_compresslog で除去したページヘッダの情報を復元し、 物理レコードが記録してあった場所をダミーデータで埋め、各ログレコー ドの LSN を復元してアーカイブリカバリで使用できるようにページサイ ズの復元も行います。 このコマンドは、recovery.conf の restore_command で指定します。 その結果、ファイルのサイズはアーカイブ前の WALセグメントファイルと 同じになります。 埋め草には "NOOP" WALレコードを用います。このレコードはリカバリ時 の redo 関数では無視されます。

lesslog のインストール方法

  1. 環境
  2. Pglesslog は、PostgreSQL 8.3.x で動作します。ここでは、PostgreSQL 8.3 で導入された "removable" フラグを使います。It uses "removable" flag in WAL

  3. インストール手順
  4. 
            full_page_writes = on
            archive_command = 'pg_compresslog "%p" /"%f"'
    

pg_compresslog の使い方

概要


    pg_compresslog [from [to]]

説明

pg_compresslog は、< from > で指定されたWALセグメントファイ ルを読み込み、 物理ログを除去し、< to > で指定されたファイル に結果を書き出します。
もし < from > が省略されるか、あるいは "-" が指定されると、 WALセグメントファイルは標準入力から読み込みます。 < to > が省略されたり "-" で指定されると、アーカイブファイル は標準出力に書き出します
pg_compresslog で対応する増分ログに置き換えられる full page write は、オンラインバックアップの実行中にかかれたもの以外になります。
pg_compresslog コマンドの出力をアーカイブリカバリで使用するには、 pg_decompresslog コマンドを使ってファイルを復元しなければなりません。

返却値

pg_compresslog は成功時にはゼロを、そうでない場合には 1 を返し ます。

pg_decompresslog の使い方

概要


    pg_decompresslog [from [to]]

説明

pg_decompresslog は、< from > 引数で指定されたアーカイブログ ファイルを読み込み、除去した物理ログに相当する領域を復元し、各ログ のLSNを復元し、結果を < to > 引数で指定されたファイルに書き 出します。
もし < from > が省略されたり "-" で指定されていた場合は、標 準入力から読み込みます。< to > が省略されていたり "-" で師弟 されていると、結果は標準出力に書き出されます。
pg_compresslog で増分ログに置き換えられた full page write は、オン ラインバックアップの実行中以外に書かれたものになります。
pg_compresslog コマンドで書き出したファイルを < from > 引数に 指定することができます。

返却値

成功時にはゼロを、エラーが起こった場合は 1 を返します。

lesslog 1.1 の新機能

Lesslog 1.1 では、HEAP2_CLEAN WAL レコードに対応する増分ログを生成する ことができます。このログレコードは、vacuum や prune (HOT) で生成されれ るものです。このWALレコードの full page write は WAL セグメントの多く の部分を占めるため、このWALレコードの full page write を増分ログで置き 換えることで、アーカイブ時のWALのサイズは劇的に小さくすることができる ようになります。

サイズの圧縮効果

  • 環境
  • 元のWALサイズと圧縮後のWALのサイズ
  • 謝辞

    Pavan Deolasee氏とHeikki Linnakangas氏には示唆に富んだコメントと助言を いただいた。彼らの助言なしにはこれほど単純には実装ができなかった。



    Powered By GForge Collaborative Development Environment