DBT-3 1.9によるPostgreSQLの評価手順

SRA OSS, Inc. 日本支社

インストール

Linuxのインストール

DBT-3を実行するためには、Linuxのインストール時に、開発環境を含むいくつかのパッケージをインストールする必要がある。

今回の評価では、「MIRACLE LINUX V4.0 - Asianux Inside for x86-64」を使用した。 MIRACLE LINUXのインストール時に選択するパッケージは、「インストールするパッケージの選択」画面で「すべて」を選択した。

PostgreSQLのインストール

以下の手順で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ディレクトリで検証を行った。

OSのファイルシステムがあるディスクをマウントした、/homeディレクトリに作成する場合
$ mkdir /home/pgsql/data
$ /usr/local/pgsql/bin/initdb --encoding=EUC_JP --no-locale \
--pgdata=/home/pgsql/data

DBT-3のインストール

今回の評価では、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
インストール
  1. はじめに、pgsqlユーザのホームディレクトリにdbt3_dataディレクトリと、DBT-3のソースコードを展開するディレクトリを作成する。 dbt3_dataディレクトリには、テーブル作成時に使用するテキストファイルが保存されることになる。

    $ mkdir ~/dbt3_data
    $ mkdir ~/src
    $ cd ~/src
    $ tar xfz /tmp/dbt3-1.9.tar.gz
  2. dbt3-1.9修正パッチを、dbt3-1.9ディレクトリに対して適用する。

    $ patch -p0 < dbt3-1.9.patch
  3. テキストエディタで、$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は、テーブル作成時に使用するテキストファイルが保存されるディレクトリを指し示す。

  4. テキストエディタで、$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は、テーブルスペースを使用する際にそのマウントポイントとなるディレクトリを指し示す。

  5. 次の手順で、DBT-3のインストールを行う。

    $ ./configure
    $ make
    $ make -C src/dbgen

パラメータの設定

OSパラメータ
sudoの設定

DBT-3の実行中にシステムのroot権限が必要なプログラムを実行するので、sudoの設定を行う必要がある。 sudoの設定はrootユーザでvisudoを起動し、User privilege specificationを次の通りに編集する。

# User privilege specification
root ALL=(ALL) ALL
pgsql ALL=(ALL) NOPASSWD:ALL
grubの設定

DBT-3ワークロードでは/proc/profileの情報も取得することができる。 /proc/profileを作成するために、grubのカーネルパラメータにprofile = N(Nは0以上の数値)と設定することにより、カーネルがどこでCPUサイクルを消費しているか調べることができるようなる。 今回の評価では、profileに1を設定した。

PostgreSQLパラメータ

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ワークロードの実行

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
-e

DBT-3ワークロードで測定するSQL文に「EXPLAIN ANALYZE」を付けるかを指定する。

-f scale_factor

DBT-3ワークロードでは、データベースの規模をスケールファクターで指定する。 スケールファクターの値は、データベースに投入するテキストファイルのサイズと対応し、1以上を指定する必要がある。 スケールファクターのデフォルト値は1である。

-g

データベースに投入するテキストファイルを生成するかを指定する。 スケールファクターが1であれば、生成されるテキストファイルのサイズは1Gバイトであり、データベースに投入した場合のデータベースクラスタのサイズはPostgreSQLのバージョン8.0では4Gバイト以上、8.1、8.2では3Gバイト弱となる。 テキストファイルは、$DSS_PATHのディレクトリに生成される。

-n num_stream

スループットテストで同時に実行するトランザクション数を指定する。 以下の表の通りに、scale_factorごとのnum_streamの値の下限が決められている。

スケールファクターごとのストリーム数の下限
scale_factor num_stream
1 2
10 3
30 4
100 5
300 6
1000 7
3000 8
10000 10
-o

oprofileのデータを取得するかを指定する。

-p load_param

ロードテストを実行する際にpostmasterに渡すオプションを指定する。 下記のように複数のオプションを渡すことができる。

-p "-B 10000 -c sort_mem=262144"
-q power_param

パワーテストを実行する際にpostmasterに渡すオプションを指定する。

-r throughput_param

スループットテストを実行する際にpostmasterに渡すオプションを指定する。

-s seed

DBT-3で実行するSQL文のパラメータは乱数で生成する。 その乱数の種を、seedで指定できる。 seedの省略時のデフォルト値は、現在の時刻である。

-t
-u

テーブルスペースを使用するかを指定する。

-v

DBT-3ワークロードを一括して実行するには、以下のように実行する。 この例では、スケールファクターとして1を、ストリーム数として4を指定している。

$ run_workload.sh -f 1 -n 4 > dbt3.out 2>&1