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 のインストール方法について説明します。
(注1) RHEL4/5では、Direct I/OとBuffered I/Oを混在させた場合に誤動作を起こすため、使用しないでください。
$ su # rpm -ivh direct_cp-1.0.0-1.pg92.rhel6.x86_64.rpm
ソースコードからビルドするには、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 の使用手順について説明します。
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
(注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 を使用する際には、以下の使用上の注意と制約があります。
WALの書き込みおよびWALのアーカイブに、Buffered I/Oを使用した場合とDirect I/Oを使用した場合の
スループット性能の差を検証した結果、Direct I/Oを使用した場合の方がBuffered I/Oを使用した場合と比べ、
スループット性能が高くなる結果になりました。
性能検証の詳細は こちら を参照してください。