1. direct_cp とは?
  2. 機能概要
  3. インストール
    1. 動作環境
    2. インストール手順
  4. 使い方
    1. WALアーカイブの設定
    2. コマンド仕様
  5. アンインストール
  6. 使用上の注意と制約
  7. 詳細情報
    1. 性能検証結果
  8. 関連項目

direct_cp 1.0

direct_cpとは?

direct_cp は、PostgreSQL のWALアーカイブファイルなどを OS のメモリを使用する事無く、コピーするツールです。
通常のコピーでは不要なディスクキャッシュを使用しますが、direct_cpはディスクキャッシュを使用しません。
direct_cpの使用による性能への影響については 性能検証結果 をご覧ください。 インストールファイルのダウンロードはこちら

機能概要

direct_cp は、PostgreSQL が pg_xlog ディレクト配下に出力している先行書き込みログ(WAL)を OS のメモリを使用せずにコピーを行います。 postgresql.conf の archive_command に使用するツールです。

※ただし、Linux 2.4 以前のマシンではダイレクトモードに非対応のため動作しません。

direct_cp の動作概要のイメージ図を以下に示します。



インストール

direct_cp のインストール方法について説明します。

動作環境

動作検証済みOS
RHEL 6.1

(注1) RHEL4/5では、Direct I/OとBuffered I/Oを混在させた場合に誤動作を起こすため、使用しないでください。

インストール手順

RPM

以下は PostgreSQL 9.2 の RHEL6 の x86_64 用の rpm をインストールする例です。
$ su
# rpm -ivh direct_cp-1.0.0-1.pg92.rhel6.x86_64.rpm

source

ソースコードからビルドするには、pgxs を使用します。

$ tar xzvf direct_cp-1.0.0.tar.gz
$ cd direct_cp-1.0.0
$ make USE_PGXS=1
$ su
# make USE_PGXS=1 install

pgxsを使用しない場合、contrib 配下に direct_cp のフォルダを配置し、make, make install を実施してください。

以上でインストールは終了です。

使い方

direct_cp の使用手順について説明します。

WALアーカイブの設定

postgresql.conf を編集し、WALアーカイブの設定を行います。
WALアーカイブの設定では、archive_command で呼び出すシェルコマンドに direct_cp を設定します。

WALファイルを /mnt/server/archivedir ディレクトリにコピーする例を以下に示します。

wal_level = archive
archive_mode = on
archive_command = 'direct_cp %p /mnt/server/archivedir/%f'
WALアーカイブの設定後、データベースを起動します。

コマンド仕様

direct_cp のコマンド仕様を以下に示します。

$ direct_cp [OPTION]... SOURCE DEST

以下にコマンド例を示します。
以下のコマンド例では、/var/pgdata/pg_xlog/000000010000000000000002 を /mnt/server/archivedir ディレクトリ配下にコピーします。

$ direct_cp /var/pgdata/pg_xlog/000000010000000000000002 /mnt/server/archivedir

オプション

-b, --buffer-size=NUM
バッファサイズをバイト単位で指定します。
バッファサイズは、4096 ~ 16777216 の範囲で 4096 の倍数を指定します。(注1)
本オプションは省略可能です。省略時はバッファサイズを 2MB として動作します。
-v, --version
バージョンを表示します。
-?, --help
ヘルプを表示します。

(注1) バッファサイズの上限値は、PostgreSQL のWALファイルのサイズとなります。

アンインストール

postgresql.conf の archive_command から direct_cp を取り除き、データベースを再起動します。
その後、direct_cp のパッケージをアンインストールします。

/* rpm でのインストールの場合 */
$ su
# rpm -e direct_cp

/* ソースビルドでのインストールの場合 */
$ su
# make USE_PGXS=1 uninstall

使用上の注意と制約

direct_cp を使用する際には、以下の使用上の注意と制約があります。

NFSを使用した環境での使用は推奨されません
NFSを使用した環境では、クライアントのページキャッシュをバイパスするだけになり、サーバではディスクキャッシュを使用する可能性があります。また、サーバの電源故障が起こった際にデータの完全性が保たれない可能性があります。
O_DIRECTが未対応のファイルシステムでは使用できない
O_DIRECTが未対応のファイルシステムでは使用できません。未対応のファイルシステムの場合はコマンド実行時にエラーになります。
WALファイル以外は通常のコピーを行う
コピー元ファイルがWALファイル以外の場合は "cp" コマンドによる通常のコピーを行います。
複数ファイルのコピーはできない
複数ファイルのコピーには対応していません。
ディレクトリのコピーはできない
ディレクトリのコピーには対応していません。

詳細情報

性能検証結果

WALの書き込みおよびWALのアーカイブに、Buffered I/Oを使用した場合とDirect I/Oを使用した場合の スループット性能の差を検証した結果、Direct I/Oを使用した場合の方がBuffered I/Oを使用した場合と比べ、 スループット性能が高くなる結果になりました。
性能検証の詳細は こちら を参照してください。

関連項目

PostgreSQLドキュメント

ログ先行書き込み(WAL), 継続的アーカイブとポイントインタイムリカバリ(PITR),