DBT-3 MySQL版によるMySQL5.0の評価手順

日本ヒューレット・パッカード株式会社

1.はじめに

本文書ではDBT-3 version 1.9のMySQL移植版を利用したMySQLの評価手順を説明する。

1.1.利用ソフトウェアバージョン

本評価手順では以下のソフトウェアを利用している。

利用ソフトウェア
OSRed Hat Eneterprise Linux AS 4 Update 3
データベースMySQL 5.0.26 Community Server
32bitOSの場合はmysql-standard-5.0.26-x86-glibc23.tar.gzを利用
64bitOSの場合はmysql-standard-5.0.26-x86_64-glibc23.tar.gzを利用
DBT-3version 1.9 MySQL移植版(1.9.ipa.mysql.01.00)

DBT-3 version 1.9 MySQL移植版(1.9.ipa.mysql.01.00)の詳細については以下を参照すること。

1.2.ディレクトリ・ファイルパスについて

MySQLやDBT-3のインストールおよびデータベースのディレクトリパスやファイルパスは、 実際のテスト環境に応じて異なる可能性がある。 このため本文書では、以下の変数を利用する。

ディレクトリ・ファイルバスリスト
変数名説明
$DBT3_HOME DBT-3を展開したトップディレクトリ。 OSDL DBT-3 v1.9を利用する場合、アーカイブを展開すると dbt3-1.9 というディレクトリが生成される。 DBT3_HOME はそのディレクトリまでの完全パスを保持する。 例えば /home/mysql ディレクトリ下に展開した場合は /home/mysql/dbt3-1.9 となる。
$DSS_PATH データベースに投入するテスト対象データとなるCSVデータファイルの生成・配置場所。 $DBT3_HOME/scripts/dbt3_profile 内に定義される。 スケールファクタ(SF)に応じて巨大なCSVデータファイルを生成するため、ディスク容量に注意する必要がある。 デフォルトでは /mnt/data になっている。
$MYSQL_DATA MySQLのデータベースファイルを配置するディレクトリ。 $DBT3_HOME/scripts/mysql/mysql_profile 内で定義される。 SF=1で約4GBのディスクスペースを必要とする。 $MYSQL_DATA を変更した場合、MySQLの設定ファイル(my.cnf)も修正する必要がある。 デフォルトは /mnt/data/mysql/data になっている。
$MYSQL_CONFIG MySQLの設定ファイルの完全パス名。 $DBT3_HOME/scripts/mysql/mysql_profile 内で定義される。 デフォルトは /mnt/data/mysql/my.cnf である。

2.インストール

2.1.Linuxのインストール

インストール時にはすべてのパッケージのインストールを選択している。 既存環境での試験を行う場合、以下のRPMパッケージがインストールされていることを確認すること。 インストールされていない場合は、インストールメディア等からインストールすること。

  • bash
  • procmail (lockfileコマンド)
  • gnuplot
  • perl
  • autoconf (autoreconfコマンド)
  • automake (aclocalコマンド)
  • make
  • gcc
  • sysstat (sarコマンドおよびiostatコマンド)
  • iostat
  • xorg-x11-* (X-Windows System)

確認例を以下に示す。

# rpm -q sysstat
パッケージ sysstat はインストールされていません。

2.2.実施ユーザ設定

DBT-3の実施および MySQL の実行ユーザをシステムに追加する。 また DBT-3 は実行中に sudo を利用するため /etc/sudoers にユーザを追加する必要がある。 パスワードなしで sudo 実行可能とするため、セキュリティに留意する。

# su -
# useradd mysql
# vi /etc/sudoers
...
root    ALL=(ALL) ALL
mysql   ALL=(ALL) NOPASSWD: ALL   ← 追加
...

2.3.MySQLのインストール

MySQL 5.0系の最新のバイナリを MySQL AB Webサイトから取得する。

本手順書では non RPM 版のバイナリ用いる。利用環境に適合した適切なバイナリを選択して取得する。 以下では Linux (non RPM) の x86 版 (glibc-2.3)を入手した場合の手順を示す。 その他のバイナリの場合はアーカイブ名を読み替える。

# cd /usr/local
# tar xvfz /tmp/mysql-standard-5.0.26-linux-i686-glibc23.tar.gz
# chown -R mysql mysql-standard-5.0.26-linux-i686-glibc23
# ln -s mysql-standard-5.0.26-linux-i686-glibc23 mysql

2.4.DBT-3のインストール

OSDL DBT-3 version 1.9を以下のサイトから入手する。

また IPA Webサイトより以下のパッチを取得する。

mysql ユーザアカウントで以下を実施する。 以下に、取得した DBT-3 およびパッチが /tmp 下にあると仮定してたインストール手順を示す。 インストール先となる DBT3_HOME は /home/mysql/dbt3-1.9 とする。

# su - mysql
$ whoami
mysql
$ cd /home/mysql
$ tar xvfz /tmp/dbt3-1.9.tar.gz
$ cd dbt3-1.9
$ gzip -dc /tmp/dbt3-1.9-20060329.patch.gz | patch -p1
...
$ gzip -dc /tmp/dbt3-1.9.ipa.mysql.01.00.patch.gz | patch -p1
...
$ aclocal
$ autoreconf --install
$ ./configure --with-mysql=/usr/local/mysql

注意: aclocal および autoeconf 実施時に下記のような警告が出力される場合がある。 この警告は aclocal の意図された動作であり、無視することができる。

$ aclocal
/usr/share/aclocal/libgcrypt.m4:23: warning: underquoted definition of AM_PATH_LIBGCRYPT
  run info '(automake)Extending aclocal'
  or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
/usr/share/aclocal/ao.m4:9: warning: underquoted definition of XIPH_PATH_AO
$ autoreconf --install
/usr/share/aclocal/libgcrypt.m4:23: warning: underquoted definition of AM_PATH_LIBGCRYPT
  run info '(automake)Extending aclocal'
  or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
/usr/share/aclocal/ao.m4:9: warning: underquoted definition of XIPH_PATH_AO

$DBT3_HOME/src/dbgen/Makefile の先頭行近くの DATABASE 変数を確認する。

# @(#)makefile.suite    2.1.8.1
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
#                                  SQLSERVER, SYBASE, PGSQL (PostgreSQL)
# Current values for MACHINE are:  ATT, DOS, HP, IBM, ICL, MVS,
#                                  SGI, SUN, U2200, VMS
# Current values for WORKLOAD are:  TPCH, TPCR
DATABASE=MYSQL    ← MYSQLとなっていること
MACHINE =HP
WORKLOAD =TPCH
...

DBT-3で利用するプログラムを以下の手順でコンパイルする。

$ cd $DBT3_HOME
$ make
$ make -C src/dbgen

2.5.DBT-3の設定

DBT-3で利用する各プロファイルおよびMySQL設定ファイルを編集する。

  • $DBT3_HOME/scripts/dbt3_profile
    DBT-3全体の設定を行う。 利用データベース、利用クエリ、CSVデータの配置場所を設定する。
    ...
    DATABASE=mysql                                            ← mysqlであることを確認
    export DSS_QUERY="/home/mysql/dbt3-1.9/queries/mysql"
    export DSS_PATH="/mnt/data/data"                          ← テスト対象データのCSVデータファイル生成ディレクトリ
    ...
    
  • $DBT3_HOME/scripts/mysql/mysql_profile
    MySQL固有の設定を行う。 MySQL設定ファイルの配置位置および、MySQLデータベースの位置などを設定する。
    # Database name
    export SID=dbt3
    # MySQL Setting file
    # If you want to use your custome my.cnf, copy it as $MYSQL_CONFIG before begining the test.
    export MYSQL_CONFIG=/mnt/data/mysql/my.cnf                ← MySQL設定ファイルパス
    # "mysql" command's option.
    export MYSQL_OPTS="-u root -v -t"                         ← クエリ実施時のmysqlコマンドオプション
    # MySQL's Database Directory
    export MYSQL_DATA=/mnt/data/mysql/data                    ← データベースディレクトリ
    
  • $DBT3_HOME/scripts/mysql/my.cnf
    DBT-3の実施時に新規データベースを作成する場合に利用されるMySQL設定ファイル。 詳細は MySQL AB :: MySQL 5.0 Reference Manual :: 5.2.1. Option and Variable Reference を参照すること。

2.6.データベースの準備

既存データベースを利用して DBT-3 を実施する場合、データベースの準備は不要である。 $DBT3_HOME/scripts/mysql/mysql_profile の $MYSQL_DATA および $MYSQL_CONFIG を適切に編集し、 既存データベースを利用可能にすること。

新規データベースを作成する場合は以下を実施する。

$ su -
# mkdir -p $DSS_DATA
# chown -R mysql $DSS_DATA
# mkdir -p `dirname $MYSQL_CONFIG`
# chown -R mysql `dirname $MYSQL_CONFIG`
# rm -rf $MYSQL_DATA                     ← 注意: 新規作成時のみ実施すること

3.評価手順

3.1.DBT-3の実施

DBT-3は、$DBT3_HOME/scripts/run_workload.sh を用いて実施する。

実施前にカレントディレクトリを $DBT3_HOME/scripts にすること。

  1. テストIDの決定
    DBT-3のテストIDを決定する。
    • テストIDを文字列で指定する場合、 run_workload.sh のオプション "-R" を利用し、テストIDを指定する。
    • テストIDを正数値とし、以後の試験で自動採番する場合、$DBT3_HOME/scirpts/run_number ファイルにテストIDを登録する。
      $ echo 1 > $DBT3_HOME/scripts/run_number
    オプション"-R"でテストIDが指定されず、また run_number ファイルが存在しない場合、テストID は 0 となる。 また run_number ファイルに 0 が記録される。
  2. シードの決定
    シードはDBT-3の Power テストおよび Throughput テストにおいてクエリのパラメータ決定に利用する乱数発生のための初期値である。 シードは run_workload.sh のオプション "-s" を利用して指定することができる。 指定しない場合、シードは$DBT3_HOME/scripts/init_seed.sh によって生成され、その値は $DBT3_HOME/scripts/output/<テストID>/seed ファイルに記録される。
  3. DBT-3の実行
    下記実行例は、テストIDをDBT3.20061101-01 とし、テスト対象データ作成、スケールファクターを 1、 ストリーム数を 1、シードを 92600125 に指定した例である。
    $ cd $DBT3_HOME/scripts
    $ ./run_workload.sh -R DBT3.20061101-01 -g -f 1 -n 1 -s 92600125 > workload.log 2>&1 &
    $ tail -f workload.log

3.2.DBT-3(run_workload.sh)のオプション

run_workload.shに指定できるオプションを以下の2つの表に示す。

DBT-3オリジナル・オプション
オプション名説明
-f sf スケールファクタ指定。 データベース用に sf × 3GB とテスト対象データのCSVデータファイルに sf × 1GB のディスク領域が必要である。
-n stream ストリーム数(スループットの多重度)指定。Throughputテスト実施時に起動されるクライアントの数。
-s seed シード指定。PowerテストおよびThroughputテスト時のクエリのパラメータ作成時の乱数の初期値として使用。
-p param Loadテスト用データベース起動パラメータ指定。データベース起動プロセスに引数として渡される。
-q param Powerテスト用データベース起動パラメータ指定。データベース起動プロセスに引数として渡される。
-r param Throughputテスト用データベース起動パラメータ指定。データベース起動プロセスに引数として渡される。
-e EXPLAIN のかわりに EXPLAIN ANALYZE の実施を指定 (PostgreSQL専用)。
-g テスト対象データ生成指定。テーブル毎にCSVデータファイルを生成する。
-o OProfileによるプロファイル実施指定。
-t Tableスペース利用指定 (PostgreSQL専用)。
-u Tableスペース利用指定 (PostgreSQL専用)。
-v Verbose指定。

MySQL版新規追加オプション
オプション名説明
-R test_id テストID指定。
-x データベース統計情報収集指定。以下のディレクトリにデータベース統計情報が記録される。
  • $DBT3_HOME/scripts/output/load/db
  • $DBT3_HOME/scripts/output/power1/db
  • $DBT3_HOME/scripts/output/thoroughput1/db
-j PowerテストとThroughputテストでEXPLAINを実施しない。
-P Throughputテストを実施しない。
-m MyISAM利用指定 (MySQL専用)。partおよびsupplierテーブルのエンジンに MyISAM を利用する。
-i VARCHARデータ型のカラムをCHARデータ型にする。
-I filename INDEX追加用シェルスクリプト指定。Loadテストで、INDEX追加処理後に実施するシェルスクリプトのファイル名を指定する。

3.3.結果確認

DBT-3の実施完了するとレポートが $DBT3_HOME/scripts/output/<テストID> ディレクトリに生成される。 ディレクトリ内に index.html が存在し、Webブラウザを利用することで結果を参照できる。

4.Tips

4.1.MySQLデータベースの起動・停止

DBT-3で利用したデータベースの起動および停止を行いたい場合、以下のシェルスクリプトが利用できる。

  • $DBT3_HOME/scripts/mysql/start_db.sh
    MySQLデータベース起動スクリプト
  • $DBT3_HOME/scripts/mysql/stop_db.sh
    MySQLデータベース停止スクリプト

4.2.PostgreSQLに対してMySQL版DBT-3を実施する

MySQL版のDBT-3をPostgreSQLで実施するための注意点を示す。 下記項目以外については DBT-3 1.9によるPostgreSQLの評価手順 を参照すること。

  • configfureスクリプトの実行
    configureスクリプト実施前に必ず PostgreSQL のバイナリがインストールされたディレクトリに実行パスを設定する。
    (/usr/local/pgsql に PostgreSQL がインストールされていると仮定する)
    $ PATH=/usr/local/pgsql/bin:$PATH
    $ cd $DBT3_HOME
    $ ./configure --with-postgresql
  • $DBT3_HOME/src/dbgen/Makefileの修正
    PostgreSQL用の qgen をコンパイルする必要がある。
    ...
    DATABASE=PGSQL    ← PGSQLに修正する
    MACHINE =HP
    WORKLOAD =TPCH
    ...   

4.3.トラブルシューティング

  • configureスクリプトが正常終了しない
    次を確認する。
    1. DBT-3およびMySQLパッチが正しくインストールされていることを確認すること。
    2. configureスクリプト実行前に aclocal および autoreconf を実施すること。
    3. MySQLデータベースが正しくインストールされていること。
    4. configure スクリプトのオプション --with-mysql に正しいパスを指定すること。
  • CSVデータ生成時にDBT-3がストールする
    run_workload.sh スクリプト実行時にオプション "-g" を追加して CSV データ生成を指示した際、 以下のようなメッセージ出力後、DBT-3がストールする場合がある。
    ...
    TPC-H Population Generator (Version 1.3.0)
    Copyright Transaction Processing Performance Council 1994 - 2000
    この現象は既存CSVデータファイルが存在するために発生する。 オプション "-g" を利用する場合は、事前に必ず既存CSVデータファイルを削除する。
  • CREATE DATABASE dbt3 実施時にエラーとなる
    MySQLのInnoDBエンジン利用時は、初回起動時にInnoDB用データベースファイルを作成するため、 起動完了までに時間がかかる。 このためmysqlクライアントがデータベースに接続できず、エラーとなる場合がある。 この現象が発生した場合は、InnoDB用データベースファイル作成完了を待ち、再度DBT-3の実施を行う。 作成完了はMySQLのログファイル($MYSQL_DATA/ホスト名.err)により確認可能である。
    $ cd $MYSQL_DATA
    $ tail ホスト名.err
    ...
    060911 15:23:17  InnoDB: Started; log sequence number 0 0
    060911 15:23:17 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
    Version: '5.0.26-standard-log'  socket: '/mnt/data/mysql/mysql.sock'  port: 3306  MySQL Community Edition - Standard (GPL)
  • DBT-3の実行が中断した
    DBT-3実施時に異常終了しても、OSおよびデータベースの統計情報収集用プロセスが走り続ける。 これらのプロセスを停止するには以下のシェルスクリプトを実行する。 なおsar コマンドの統計情報収集結果をテキストファイルに出力したい場合は、ディレクトリを指定する。 指定しない場合はエラーになるが、プロセスは停止する。
    $ $DBT3_HOME/scripts/stop_sysstats.sh [some_where_directory/]   ← ディレクトリ指定は任意
    
  • レポートが生成されない
    DBT-3のレポートには収集したクエリ実施時間および各種統計情報等から gnuplot を利用して統計情報を生成する。 このため X-Window System が利用可能な環境で DBT-3 を実施する必要がある。
    DBT-3実施前に xclock など X-Window System上で動作するアプリケーションを起動することができるか確認すること。