OSDL DBT-1 PostgreSQL(ODBC版)評価手順書

ここでは、OSDL DBT-1 PostgreSQL(ODBC版)について、データサイズ指定を使用した測定を実施するための手順について記述する。
各測定には、オペレーティングシステム/ミドルウェア/負荷ツールがそれぞれ必要であり、各対象に応じてそれぞれを適宜組み合わせて、環境を構築する。

1 環境設定

1.1 Linuxのインストール

ディストリビューションのデフォルトインストールを想定している。インストールに関してはディストリビューションのインストレーション・マニュアル等に従うこと。
対象ディストリビューション: Red Hat Enterprise Linux AS4.0 Update3
注) DBT-1の測定にはssh、gcc、sysstat、libstdcが必要。PostrgreSQL用には、autoconfが必要(Red Hat Enterprise Linux AS4.0 Update3に付属されているものを使用している)。

1.2 DBT-1用オプション設定

1.2.1 I/Oスケジューラの設定

カーネルのI/Oスケジューラのパラメータを変更する。カーネルからのI/O要求が割り当てられる期限を設定して応答性を確保、更にディスクへの読み込み要求の優先順位を引き上げてDBの性能効率を上げるため、 /boot/grub/grub.conf の 起動するカーネルの“kernel”で始まる行の最後に“elevator=deadline”を追加する。

kernel /vmlinuz-2.6.9-34.ELsmp ro root=LABEL=/1 rhgb quiet elevator=deadline

1.2.2 limits.confの設定

プログラム内部では、スレッド単位にソケットを開くため、1プロセス内で、同時に開くことが出来るファイル数の上限数が少ないと、スレッドを生成してもソケットのオープンに失敗する。そのため、設定ファイル(/etc/security/limis.conf)に以下の定義を追加し、上限を引き上げておく必要がある。

* soft nofile 9216
* hard nofile 9216

※“nofile”の記述が無い場合は、上記2行を追加し、記述がある場合は値を修正する。

1.2.3 共有メモリの設定

PostgreSQLが利用する共有メモリの領域を増やして効率を上げるため、カーネルパラメータの共有メモリ(/proc/sys/kernel/shmmax)の値を以下のように変更する。
今回の測定では2GBに設定している。

2147483648

1.2.4 セマフォの設定

appServerがPostgreSQLへDBへ接続する時、セマフォが足りなくなることが考えられるため、カーネルのセマフォ(/proc/sys/kernel/sem)の値を以下のように変更する。

256 32000 100 142

2 ミドルウェア

2.1 PostgreSQLのインストール

PostgreSQLは、ここではソースからインストールする。一般的なインストール方法と異ならないが、ここではPostgreSQLのスーパーユーザ名などを以下で指定している。手順は以下の通りである。
今回の測定開始時点で使用したバージョンは、8.1.3であったため、これを使用する。
入手元:http://www.postgresql.org/

rootユーザで、PostgreSQLの所有者兼実行者となるLinuxユーザとして、pgsqlユーザとpgsqlグループを作成する。

# groupadd pgsql
# useradd pgsql -g pgsql

rootユーザでPostgreSQLのソースコードアーカイブを展開するディレクトリと、PostgreSQLをインストールするディレクトリを作成して、ディレクトリの所有者をpgsqlユーザにする。

# mkdir /usr/local/src/postgresql-8.1.3
# chown pgsql /usr/local/src/postgresql-8.1.3
# mkdir /usr/local/pgsql
# chown pgsql /usr/local/pgsql

pgsqlユーザで、PostgreSQLのソースコードアーカイブを展開し、展開したディレクトリに移動する。PostgreSQLのソースコードアーカイブは、/tmpディレクトリにあるものとする。

# su - pgsql
$ cd /usr/local/src
$ tar zxvf /tmp/postgresql-8.1.3.tar.gz
$ cd postgresql-8.1.3

展開したPostgreSQLのソースコードをコンパイルし、インストールする。

$ ./configure
$ make all
$ make install

2.2 iODBCのインストール

DBT-1 PostgreSQL(ODBC版)を使用する場合、iODBCドライバ・マネジャをインストールする必要がある。また、Linux上でODBCドライバを利用したアプリケーションを使用するためには、ODBCドライバ・マネージャと下位データアクセスドライバであるPostgreSQL用のODBCドライバをインストールする必要がある。ここでは、ODBCドライバ・マネジャーとしてiODBCを使用する。
入手元:http://www.iodbc.org/

$ su root
# mkdir /usr/local/src/libiodbc-3.51.2
# chown pgsql /usr/local/src/libiodbc-3.51.2
# su - pgsql
$ cd /usr/local/src
$ tar zxvf /tmp/libiodbc-3.51.2.tar.gz
$ cd libiodbc-3.51.2
$ ./configure
$ make
$ su root
# make install

本測定で使用したiODBCドライバ・マネジャは、本サイトからもダウンロードできる。

2.3 psqlodbcドライバのインストール

DBT-1 PostgreSQL(ODBC版)を使用する場合、PostgreSQL用ODBCドライバをiODBCドライバ・マネージャに対応するようにインストールする必要がある。但し、本測定で使用したpsqlodbcドライバは、iODBCドライバ・マネージャに対応したコンパイルオプションを設定してコンパイルを行うとエラーが発生してしまうため、デフォルトの設定であるunixODBCのオプションを使用してコンパイルを行う。psqlodbcドライバは以下のURLから入手した。
入手元:http://www.postgresql.org/ftp/odbc/versions/src/

# mkdir /usr/local/src/psqlodbc-08.00.0102
# chown pgsql /usr/local/src/psqlodbc-08.00.0102
# su - pgsql
$ cd /usr/local/src
$ tar zxvf /tmp/psqlodbc-08.00.0102.tar.gz
$ cd psqlodbc-08.00.0102
$ ./configure
$ make
$ su root
# make install

DBT-1がODBCドライバ・マネージャ経由でPostgreSQLに接続を行なうための設定を行なう。pgsqlユーザで、そのホームディレクトリに下記内容の.odbc.iniファイルを作成する。

[ODBC Data Sources]
DBT1 =Postgres DBT1
[DBT1]
Servername = localhost
Database = DBT1
Driver = /usr/local/lib/psqlodbc.so
Port = 5432
ReadOnly=No

本測定で使用したPostgreSQL用ODBCドライバは、本サイトからもダウンロードできる。

3 負荷ツール

3.1 DBT-1用の事前環境設定

3.1.1 ユーザの作成

PostgreSQLでは、必ずPostgreSQLの実行者ID=pgsql、グループ=pgsql、パスワード=pgsqlで実行すること。

3.1.2 sudoの準備

ログ情報の取得には、root権限が必要なコマンドがあるため、DBT-1を実行するユーザがsudoを利用できるよう、/etc/sudoersファイルを編集する。
編集方法は、rootユーザでvisudoを起動し、以下の1行を追加する。

pgsql ALL=(ALL) NOPASSWD: ALL

3.1.3 ユーザ環境設定

pgsqlユーザでログインし、~/.bashrcファイル 内に以下の設定を追加する。
今回の測定では、ディスクへのI/Oを分散させて性能を向上させるため、ログ用とデータ用のディスクを分けて配置している。
ログを出力するディスクを/hdd/sdb/data、テーブルスペースのディスクを/hdd/sdc/dataとしている。

export PGDIR=/usr/local/pgsql
export PATH=$PATH:$PGDIR:$PGDIR/bin
export PGUSER=pgsql
export PGDATA=/hdd/sdb/data
export SID1=DBT1
export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/pgsql/lib

3.2 DBT-1のインストール

3.2.1 DBT-1のダウンロード

pgsqlユーザでログインする。OSDL DBT-1 PostgreSQL(ODBC版)のソースをユーザのホームディレクトリにダウンロードする。今回は以下のDBT-1を用いて測定を行った。バージョンは2.1である。
ダウンロード:DBT-1ダウンロード

3.2.2 DBT-1の解凍

次のコマンドでDBT-1を展開する。

$ tar zxvf dbt1-v2.1-PostgreSQL-ODBC-1.2.2.tar.gz

3.2.3 DBT-1のコンパイル

今回はデータサイズ指定でデータが作成できるように、datagenのプログラムを改変したものを用いて測定を行っている。 ここで言うデータサイズとは、データ生成プログラムであるdatagenプログラムによって生成される複数のファイルの合計容量を指す。 以下のファイルをコピーし、コンパイルする。

$ cd ~/dbt1-v2.1/datagen
$ ./configure --with-postgresql-odbc --without-sapdb
$ make
$ make install

4 DBT-1評価手順

4.1 前提条件

Red Hat Exterprise Linuxインストール時に導入するパッケージは標準構成をベースとし、ディストリビューションに含まれるCDの内容のみ使用する。
但しDBT-1を実行するために必要なパッケージは適宜追加する。

4.2 テストデータの作成

4.2.1 データ用ディレクトリの作成

pgsqlでログインし、データを格納するディレクトリを設定する。

$ mkdir ~/data
$ chmod a+w ~/data

4.2.2 データの生成

$ cd ~/dbt1-v2.1/datagen
$ ./datagen -d PGSQL -g 6.5 -p /home/pgsql/data

オプションの解説
-d : データベースタイプ(PGSQLのみ)
-i : 生成するアイテム総数
-u : 生成する仮想ユーザ数
-g : 生成するデータサイズ(生成されるファイルの総容量)
-p : 実際に生成するデータディレクトリ
-T : データを生成するテーブル名
   i -- item
   c -- customer
   a -- author
   d -- address
   o -- order

※-gで指定するデータサイズはGB単位で指定する。
※-pに与えるパスはフルパスで指定する。指定したディレクトリ内にデータが作成される。
※実際に生成されたデータファイルには/tmpディレクトリからシンボリックリンクが張られる。データロードには、/tmp ディレクトリからのパスが使用される。
※上記パラメータで作成されるデータの総容量は、約6.5GBとなる。

4.3 データベースの作成

rootユーザでデータベース用のディレクトリを作成する。

# mkdir -p /hdd/sdb/data
# chown -R pgsql /hdd/sdb/data
# mkdir -p /hdd/sdc/data
# chown -R pgsql /hdd/sdc/data

PostgreSQLのテーブルスペース機能を使用するため、”/home/pgsql/dbt1-v2.1/scripts/pgsql/create_db.sh”ファイルの20行目を下記に変更する。

_o=`createdb $SID1 --tablespace=sdc 2>&1`

pgsqlユーザにて、次のコマンドでPostgreSQLにデータベースを作成し、同時にテーブルスペースも作成する。 作成するデータベース名はDBT-1としている

# su - pgsql
$ initdb --no-locale --encoding =EUC_JP
$ createdb DBT1
$ psql DBT1 -c "create tablespace sdc location '/hdd/sdc/data' ;"
$ cd ~/dbt1-v2.1/scripts/pgsql
$ ./build_db.sh ' ' 0 0

build_db.sh 実行時は、' (シングルコーテーション)の前後に空白を必ず挿入し、実行すること。

4.4 DBT-1の環境設定

エディタでDBT-1設定ファイル(~/dbt1-v2.1/scripts/stats/dbt1.config)を編集する。
・ホスト名をlocalhostに修正
・ディレクトリを各バイナリが存在するディレクトリに修正
・総エミュレートユーザ数を計測を行う仮想ユーザ数に修正
PostgreSQLの場合の各行は以下のとおり


図4-1 DBT-1設定ファイルの編集例

※今回の評価では、生成顧客数・総エミュレートユーザ数のみを変えて評価を実施する。(下線部)
※複数のサーバに実行を分散する場合、サーバの数だけ、全項目を":"で区切って定義を追加する。

4.5 起動方法

4.5.1 データベースの起動

DBT-1実行中のPostgreSQLの稼動情報は、PostgreSQLの統計情報収集機能 (statics collector)により取得できる。この機能を有効にする場合は、$PGDATA/postgresql.confの関連項目を編集し、PostgreSQLを再起動すること。

stats_start_collector = on
stats_command_string = on
stats_block_level = on
stats_row_level = on
stats_reset_on_server_start = on

PostgreSQLを起動する。起動している場合は必要ないが、PostgreSQL内部のキャッシュなどをクリアするには、再起動することが必要である。pgsqlユーザで、以下のコマンドを実行する。

$ pg_ctl stop
$ pg_ctl start

4.5.2 トランザクション・パラメータの設定

トランザクション作業領域の容量が不足すると、DBとは関係の無い箇所で処理待ちが生じるため、以下の値はDBT-1設定ファイル(~/dbt1-v2.1/scripts/stats/dbt1.config)内の”#eu”以上の値を指定する。

#transaction_queue_szie
#transaction_array_szie

4.5.3 測定

次のコマンドでDBT-1を測定する

$ cd ~/dbt1-v2.1/scripts/stats
$ ./run_dbt1.sh /home/pgsql/U200

※今回は、DBの性能評価であるため、appCacheを使用しない。
※run_dbt1.shに引数として与えるディレクトリは事前に作成する必要はない。
※引数のディレクトリ(/home/pgsql/U200)にBTファイルが作成されており、最終行の「total errors」が0となっていれば、測定の成功となる。

以下に、BTファイルの例を示す。


図4-2 BTファイルの例

5 出力情報

5.1 DBT-1が取得するシステム情報

表5-1 DBT-1が取得するシステム情報一覧
情報種別 コマンド 出力ファイル名 備考
システム統計 sar -A run.sar.data 10秒間隔
I/O情報 iostat -d io.txt 10秒間隔
プロセス一覧 top d 120 b top.txt 120秒間隔
接続セッション情報 select * from pg_stat_activity db_activity*.out * は取得回数
内部キャッシュファイルシステムI/O統計 select * from pg_stat_database where datname='DBT1'; db_load*.out * は取得回数
ユーザインデックスに関する内部キャッシュファイルシステムI/O統計 select relid, indexrelid, relname, indexrelname idx_blks_read, idx_blks_hit from pg_statio_user_indexes index_info*.out * は取得回数
ユーザインデックス問い合わせ数の統計 select * from pg_stat_user_indexes; indexes_scan*.out * は取得回数
ロックに関する情報 select relname,pid, mode, granted from pg_locks, pg_class where relfilenode = relation lockstats*.out * は取得回数
ユーザテーブルに関する内部キャッシュファイルシステムI/O統計 select relid, relname, heap_blks_read,heap_blks_hit,idx_blks_read, idx_blks_hit from pg_statio_user_tables; table_info*.out * は取得回数
ユーザテーブの問い合わせ方法の統計 select * from pg_stat_user_tables; table_scan*.out * は取得回数
ロックに関する情報 select * from pg_locks where transaction is not NULL; tran_lock*.out * は取得回数

5.2 DBT-1のログ情報

表 5-2 DBT-1実行結果を記録するファイル
ファイル名 説明
BT インタラクション別平均応答時間、BT/秒等OSDL DBT-1測定結果が格納される。
mix.log dbdriverからappServerへのリクエストインタラクション、応答時間(msec)が記録される。BTファイルを計算するための元情報。