PowerGres

技術情報 | PowerGres体験記 | 第 3 回 高速 COPY コマンドの活用 – 性能チューニングのポイント

このページに記載の情報は、2005 年にリリースした PowerGres Plus V2 を対象としています。PowerGres Plus V2 の販売はすでに終了しています。

PowerGres Plus の最新バージョンに関する情報は、製品紹介ページまたは PowerGres 体験記ページを参照してください。

第 3 回 高速 COPY コマンドの活用 『データ移行が短時間で完了』

はじめに

私は縁あって、パソコン教室のボランティア講師をしています。 その関係で、パソコン教室の資料や、教育資材の管理を自宅の貧弱なパソコンで行っていました。 データベースは PostgreSQL 7.3 を使用していました。 データ量が増え、ハードディスクの容量が不足してきたため、思い切って、数ヶ月前、ハードウェアのアップグレードを行いました。 ついでに PostgreSQL のバージョンも 7.4 にアップしましたが、膨れ上がったデータの移行に半日以上かかりました。

色々な運用形態でのデータベースの移行が考えられますが、私のように移行するための新しいサーバがある場合は、前もってアプリケーションやソフトウェアの準備はできるので、あとはデータをどれだけ早く移行できるかがポイントになります。 PowerGres Plus では、オリジナルの COPY コマンドに加え、高速 COPY という機能を持っています。 高速 COPY コマンドを利用することで、データベースへのデータのロードの時間を短縮することができます。

第 3 回では、高速 COPY コマンドの活用により、作業時間が短縮されることを説明いたします。

データの移行

最近では、インターネットだけでなく、コンビニエンスストアの ATM など、土曜日、日曜日も含め、24 時間稼動している業務が増えています。 このような業務で、データベースの移行を実施する場合は、いかに早く移行を完了させ、お客様のご迷惑とならないようにするかを考えなければなりません。

色々な業務の移行形態があると思いますが、今回は新しいサーバを準備して移行する場合の移行方法を考えてみます。 サーバが別々に準備されているので、OS を含めた必用なソフトウェアのインストールや、業務アプリケーションの移行、インスタンスの作成、データベースの作成は、事前に行うことができます。後は、データベースの移行をいかに速やかに行うかが重要です。

データベースの移行

図 1: データベースの移行

データの移行は、あらかじめ PostgreSQL 7.3 に 13 GB のデータを挿入しておき、そのデータを pg_dmpall で移出し、それぞれ、PowerGres Plus 2.0、PostgreSQL 8.0.4 に移入する方法を取りました。

大量データの移行時間

図 2: 大量データの移行時間

図 2 からもわかるように、PostgreSQL で 1 日以上かかるデータベース移行も、PowerGres Plus では、約 2 時間 30 分で終了しています。 PowerGres Plus では、高速 COPY コマンドという機能があるためです。

今回は、参考として PostgreSQL からのデータ移行時間を例に説明しましたが、PowerGres Plus には、ora2pg というツールがあり、Oracle からのデータベースの移行や、データ移行を簡単に行うことができます。 詳細は、Oracleマイグレーションで説明しますが、データの移行には SQL の COPY コマンドを利用します。

高速 COPY コマンドの使用方法

COPY コマンドは、データベースとファイルの間でデータのやりとりを行うときに使用するコマンドです。

PowerGres Plus は、通常の COPY コマンドとは別に、データを高速にデータベースにロードする機能があり、「高速 COPY コマンド」と呼びます。 高速 COPY コマンドを使用するには、「ENABLE_DIRECT_COPY」オプションを「on」に設定します。その方法には以下 2 つがあります。

  1. インスタンスディレクトリ下の postgresql.conf にオプションを追加
  2. COPY コマンド実行前に、SET 命令で実行時オプションとして設定

今回は、1 の方法を使用します。 この方法はインスタンスの再起動が必要となりますが、1 回設定すると必ず高速 COPY が使用できるので、毎回 SET 命令を修正するよりは運用が簡単になるからです。 また、pg_dump、pg_dmpall、pgx_dmpall、ora2pg コマンドなど、データの移出はすべて COPY コマンドを使用することができるため、そのファイルを修正せずに実行できます。 さらに、周辺ツールでも COPY コマンドでデータを移入する機能を持つものは、PostgreSQL と構文を変更する必要なく、高速 COPY コマンドでデータの移入が行なえます。

  1. インスタンスディレクトリ下の postgresql.conf で以下のようにオプションを設定します。
    ENABLE_DIRECT_COPY=on
  2. インスタンスを再起動します。
  3. 入力ファイル名が「output.sql」、テーブル名「table1」の場合、以下のように入力します。
    COPY table1 from output.sql
高速COPYコマンドの仕組み

通常、データベース定義は、データ検索性能を上げるためにインデックスが定義されています。 PostgreSQL では、インデックスデータをロードするときに必ずインデックスの形式に従い、インデックスを検索しながらデータを書き込みます。 PowerGres Plus では、インデックスのデータをソートした状態で一度に設定することができます。 さらに、PowerGres Plus では複数のインデックスがある場合、これらの処理を並列して実行できます。 そのため、PostgreSQL より高速に COPY コマンドが動作します。

高速 COPY コマンドの仕組み

図 3: 高速 COPY コマンドの仕組み

PowerGres Plus のデータ移行が高速なのは、データベースへのデータロードで、インデックスのロード時間が短いためです。 以下の図 4 のグラフを参照してください。 インデックスの数が多いほど、データベースへのデータロード時間が短縮されていることがわかると思います。

PowerGres Plus 2.0 と PostgreSQL 8.0.4 のデータロード時間

図 4: PowerGres Plus 2.0 と PostgreSQL 8.0.4 のデータロード時間

最後に

PowerGres Plus では、高速コピーを利用することで、大容量のデータを短時間で、データベースにロードすることができます。 この機能を利用することで、データベース移行時のデータ移行、また、ハードウェア (ハードディスク) 交換時のデータ移行作業時間を短縮することができます。 1 つだけ、高速 COPY コマンドを利用する場合の注意点があります。 高速 COPY を利用した後は、必ずバックアップをとるようにしてください。 高速 COPY コマンドは、ログを取らないので、データを最新に復旧することができなくなります。

この記事を執筆中に 8.1 が正式にリリースされ、その実力を知るために、早速データロード時間を測定してみました。 結果は、確かに 8.0 よりは良いものの、インデックスがある場合は、PowerGres Plus に軍配があがりました。 詳細は、「PostgreSQL 8.1 性能測定結果」を参照してください。

測定環境

ハードウェア
OS Red Hat Enterprise Linux ES 3 (x86 アーキテクチャ)
CPU Pentium Xeon 1.8 GHz × 1 個
メモリ 1 GB
ソフトウェア

PostgreSQL 8.1 性能測定結果

PostgreSQL 8.1 COPY 性能測定結果

図 5: PostgreSQL 8.1 COPY 性能測定結果

製品・サービスに関するお問い合わせ
03-5979-2701

お問い合せ受付時間 月 - 金 10:00 - 17:00

メールフォームでのお問い合わせ

ページトップへ