SRA OSS, Inc. 日本支社
DBT-3を実行するためには、Linuxのインストール時に、開発環境を含むいくつかのパッケージをインストールする必要がある。
今回の評価では、「MIRACLE LINUX V4.0 - Asianux Inside for x86-64」を使用した。 MIRACLE LINUXのインストール時に選択するパッケージは、「インストールするパッケージの選択」画面で「すべて」を選択した。
以下の手順でPostgreSQLをインストールできるが、2つのバージョンを同時にインストールする場合は、使用するディレクトリが競合しないように、適切に変更する必要がある。 なお、今回の評価ではバージョン8.0以降を使用することを前提とする。
rootユーザで、PostgreSQLの所有者となるLinuxのユーザとして、pgsqlユーザを作成する。
# useradd pgsql
PostgreSQLのソースコードアーカイブを展開するディレクトリと、PostgreSQLをインストールするディレクトリを作成して、ディレクトリの所有者をpgsqlユーザにする。
# mkdir /usr/local/src/postgresql-8.1.2 # chown pgsql /usr/local/src/postgresql-8.1.2 # mkdir /usr/local/pgsql # chown pgsql /usr/local/pgsql
pgsqlユーザで、PostgreSQLのソースコードアーカイブを展開し、展開したディレクトリに移動する。 PostgreSQLのソースコードアーカイブは、/tmpディレクトリにあるものとする。
# su - pgsql $ cd /usr/local/src $ tar xfz /tmp/postgresql-8.1.2.tar.gz $ cd postgresql-8.1.2
展開したPostgreSQLのソースコードをコンパイルし、インストールする。
$ ./configure --prefix=/usr/local/pgsql $ make all $ make install
DBT-3ワークロードを実行すると、データベースクラスタが既に存在していればそれを使用し、まだ存在していなければ自動的にデータベースクラスタが作成される。 しかし、自動的に作成されるデータベースクラスタの文字エンコーディングはASCIIであり、またDBT-3ワークロードも実行してくれるので、PostgreSQLの設定ファイルを編集することが出来ない。
そこで、DBT-3ワークロードを実行する前に、手作業でデータベースクラスタを作成することを推奨する。 その際に、デフォルトの文字エンコーディングとして、日本で一般的に使用されるEUC_JPを指定する。
データベースクラスタを作成するディレクトリは、デフォルトではPostgreSQLをインストールしたディレクトリ内であり、通常はOSのシステムファイルがあるハードディスクになる。 このディレクトリを、データベースクラスタ専用のハードディスクをマウントしたディレクトリに作成することで、処理性能の向上が見込める。
今回の評価では、データベースクラスタのディレクトリとして、OSのシステムファイルがあるハードディスクをマウントした、/homeディレクトリで検証を行った。
$ mkdir /home/pgsql/data $ /usr/local/pgsql/bin/initdb --encoding=EUC_JP --no-locale \ --pgdata=/home/pgsql/data
今回の評価では、DBT-3のバージョン1.9を使用した。 以下の手順でインストールすることが出来る。
DBT-3のソースコードアーカイブを、以下のサイトからダウンロードして、/tmpディレクトリに格納する。 ファイル名は、「dbt3-1.9.tar.gz」である。
http://sourceforge.net/projects/osdldbt
今回の評価では、DBT-3の修正パッチ(dbt3-1.9-20060329.patch.gz)を作成した。 このパッチを、/tmpディレクトリに格納する。
DBT-3のインストールは、pgsqlユーザで行う。 DBT-3をインストールするディレクトリを「/home/pgsql/src/dbt3-1.9」とし、環境変数「$DBT3_HOME」に設定する。
$ export DBT3_HOME=/home/pgsql/src/dbt3-1.9
はじめに、pgsqlユーザのホームディレクトリにdbt3_dataディレクトリと、DBT-3のソースコードを展開するディレクトリを作成する。 dbt3_dataディレクトリには、テーブル作成時に使用するテキストファイルが保存されることになる。
$ mkdir ~/dbt3_data $ mkdir ~/src $ cd ~/src $ tar xfz /tmp/dbt3-1.9.tar.gz
dbt3-1.9修正パッチを、dbt3-1.9ディレクトリに対して適用する。
$ patch -p0 < dbt3-1.9.patch
テキストエディタで、$DBT3_HOME/scripts/dbt3_profile.inを以下のように設定する。
export DSS_QUERY="@TOPDIR@/queries/@DATABASE_TO_USE@" export DSS_PATH="/home/pgsql/dbt3_data" export DSS_CONFIG="@TOPDIR@/src/dbgen" export DBT3_PERL_MODULE="@TOPDIR@/perlmodules"
※ここでユーザが変更すべき箇所はDSS_PATHである。 DSS_PATHは、テーブル作成時に使用するテキストファイルが保存されるディレクトリを指し示す。
テキストエディタで、$DBT3_HOME/scripts/pgsql/pgsql_profile.inを以下のように設定する。
export SID=dbt3 export PGDATA=/dbt3_0/pgsql export DEFAULT_LOAD_PARAMETERS="" export DEFAULT_POWER_PARAMETERS="" export DEFAULT_THROUGHPUT_PARAMETERS="" TSDIR=
※ここでユーザが変更すべき箇所はPGDATA、TSDIRである。 PGDATAは、データベースクラスタの格納場所。 TSDIRは、テーブルスペースを使用する際にそのマウントポイントとなるディレクトリを指し示す。
次の手順で、DBT-3のインストールを行う。
$ ./configure $ make $ make -C src/dbgen
DBT-3の実行中にシステムのroot権限が必要なプログラムを実行するので、sudoの設定を行う必要がある。 sudoの設定はrootユーザでvisudoを起動し、User privilege specificationを次の通りに編集する。
# User privilege specification root ALL=(ALL) ALL pgsql ALL=(ALL) NOPASSWD:ALL
DBT-3ワークロードでは/proc/profileの情報も取得することができる。 /proc/profileを作成するために、grubのカーネルパラメータにprofile = N(Nは0以上の数値)と設定することにより、カーネルがどこでCPUサイクルを消費しているか調べることができるようなる。 今回の評価では、profileに1を設定した。
DBT-3 1.9の一部のSQLではFROM句に指定するべきテーブルが省略されている。 PostgreSQLのバージョン8.1以前では参照されるテーブルをFROM句に追加することがデフォルトの振る舞いであったが、それ以降では明示的に設定しなければエラーとなる。 そのため、PostgreSQLのデータベースクラスタのディレクトリにある、設定ファイル(postgresql.conf)の項目を以下のように設定する必要がある。
add_missig_from = true
また、DBT-3ワークロードではPostgreSQLの統計情報収集器(statistics collectorの情報を収集することができる。 この機能を有効にする場合は、設定ファイルの項目を以下のように設定する必要がある。 今回の評価では、以下のように設定した。
stats_start_collector = true stats_command_string = true stats_block_level = true stats_row_level = true stats_reset_on_server_start = true
DBT-3ワークロードを実行する前に、インストール時に生成された環境設定ファイルをロードして、必要な環境変数を設定する必要がある。 次の手順で、環境変数を設定することが出来る。
$ cd $DBT3_HOME/scripts/pgsql $ source set_run_env.sh
DBT-3ワークロードは、次の4つの処理を順番に実行する。
DBT-3ワークロードで使用する、データベースに投入するためのテキストファイルを生成する。
生成したテキストファイルをデータベースに投入し、その処理時間を測定する。
DBT-3ワークロードで測定するSQL文を1つずつ実行し、その処理時間を測定する。
DBT-3ワークロードで測定するSQL文を、指定のストリーム数で同時に実行し、その処理時間を測定する。
DBT-3ワークロードを実行するには、$DBT3_HOME/scripts/run_workload.shスクリプトファイルを使用する。 このスクリプトファイルは、DBT-3ワークロードを実行し、その測定結果を特定のディレクトリに保存し、HTML形式のレポートを作成する。
そのディレクトリは、run_workload.shスクリプトファイルを実行するディレクトリのrun_numberファイルに数値で指定する。 省略時のデフォルト値は0である。 例えば、1を指定するには、次の通りである。
$ echo 1 > run_number
上記のように1を指定すると、DBT-3ワークロードを実行した結果は、$DBT3_HOME/scripts/output/1ディレクトリに作成される。
$DBT3_HOME/scripts/run_workload.shスクリプトファイルには、次のオプションが指定できる。
run_workload.sh
-e
-f scale_factor
-g
-n num_stream
-o
-p load_param
-q power_param
-r throughput_param
-s seed
-t
-u
-v
DBT-3ワークロードで測定するSQL文に「EXPLAIN ANALYZE」を付けるかを指定する。
DBT-3ワークロードでは、データベースの規模をスケールファクターで指定する。 スケールファクターの値は、データベースに投入するテキストファイルのサイズと対応し、1以上を指定する必要がある。 スケールファクターのデフォルト値は1である。
データベースに投入するテキストファイルを生成するかを指定する。 スケールファクターが1であれば、生成されるテキストファイルのサイズは1Gバイトであり、データベースに投入した場合のデータベースクラスタのサイズはPostgreSQLのバージョン8.0では4Gバイト以上、8.1、8.2では3Gバイト弱となる。 テキストファイルは、$DSS_PATHのディレクトリに生成される。
スループットテストで同時に実行するトランザクション数を指定する。 以下の表の通りに、scale_factorごとのnum_streamの値の下限が決められている。
| scale_factor | num_stream |
|---|---|
| 1 | 2 |
| 10 | 3 |
| 30 | 4 |
| 100 | 5 |
| 300 | 6 |
| 1000 | 7 |
| 3000 | 8 |
| 10000 | 10 |
oprofileのデータを取得するかを指定する。
ロードテストを実行する際にpostmasterに渡すオプションを指定する。 下記のように複数のオプションを渡すことができる。
-p "-B 10000 -c sort_mem=262144"
パワーテストを実行する際にpostmasterに渡すオプションを指定する。
スループットテストを実行する際にpostmasterに渡すオプションを指定する。
DBT-3で実行するSQL文のパラメータは乱数で生成する。 その乱数の種を、seedで指定できる。 seedの省略時のデフォルト値は、現在の時刻である。
テーブルスペースを使用するかを指定する。
DBT-3ワークロードを一括して実行するには、以下のように実行する。 この例では、スケールファクターとして1を、ストリーム数として4を指定している。
$ run_workload.sh -f 1 -n 4 > dbt3.out 2>&1