データベースのベンチマーク手法には大規模なものから簡易的なものまで様々なものがあるが、今回はMySQLに付属している「sql-bench」というベンチマークツールを利用した。sql-benchはPerlで記述されたベンチマークツールで、9つのベンチマーク項目が用意されており(表1)、データベースに対してさまざまなSQLコマンドを発行してその実行時間を測定するものだ。SQLコマンドの発行はシングルスレッドで行われるので、データベースがどの程度の負荷に耐えられるかを測定する、というよりも、データベース自体の処理速度を計測する目的で利用されることが多いベンチマークである。また、SQLコマンドの種類ごとに処理にかかった時間を測定できるため、どのような処理が得意でどのような処理が苦手なのか、という傾向をつかむこともできる。
| ベンチマーク項目 | 説明 |
|---|---|
| alter-table | テーブルに対して多数のフィールド追加/削除を行うテスト |
| ATIS | 複数のテーブルに対して多数のselect文を発行するテスト |
| big-tables | 巨大なテーブルに対してアクセスを行うテスト |
| connect | サーバーへの接続速度を評価するテスト |
| create | テーブル作成の速度を評価するテスト |
| insert | テーブルへのデータのinsert速度を評価するテスト |
| select | select文のパフォーマンスを評価するテスト |
| transactions | トランザクションの速度を計測するテスト |
| wisconsin | Wisconsinベンチマークを行うテスト。SQL文の実行速度を計測できる |
今回のベンチマークには、CPUとしてCore 2 Duo(2.33GHz)を搭載したLinuxマシンを使用した。OSにはDebian GNU/Linux 5.0を使用している(表2)。また、MySQLの設定は基本的にはデフォルトのままだが、バッファ/キャッシュサイズについては表3のように変更している。ベンチマークはそれぞれ3回ずつ実行し、その平均をベンチマーク結果とした。なお、今回のベンチマークではデータベースとしてMySQLデフォルトのMyISAMを使用しているため、トランザクションに関するベンチマークは行っていない。そのほかベンチマークの詳細な手順については、コラムを参照してほしい。
| 構成要素 | スペック |
|---|---|
| CPU | Core 2 Duo E6550(2.33GHz) |
| OS | Debian GNU/Linux 5.0 |
| メモリ | 2GB |
| HDD(OS) | Seagate Barracuda 7200.10(250GB) |
| HDD(DB) | Maxtor DiamondMax Plus 9(80GB) |
| 設定項目 | 値 |
|---|---|
| key_buffer_size | 860MB |
| table_cache | 512 |
| sort_buffer_size | 128MB |
| read_buffer_size | 100M |
| read_rnd_buffer_size | 96MB |
| myisam_sort_buffer_size | 128MB |
| thread_cache_size | 64 |
| query_cache_size | 256MB |
今回のベンチマークは、次のような手順で行った。なお、今回のベンチマークは比較的スタンダードな設定で行っているが、ベンチマーク結果はMySQLの設定や使用するマシンのCPU、OS、搭載メモリ、ストレージなどによって大きく変動する場合がある。ベンチマークに必要なファイル等はすべてWeb上からダウンロードできるので、実際に手元で確認していただきたい。
MySQL 5.1のダウンロードページから、Linux(non RPM package)およびLinux(non RPM, Intel C/C++ compiled, glibc-2.3)版のバイナリをダウンロードし、アーカイブに含まれている「INSTALL-BINARY」ファイルの指示通りにインストールしてMySQLサーバーを起動する。なお、MySQLサーバーはオプションで使用するバッファやキャッシュのサイズを指定できるが、今回は「mysqld_safe」コマンドに次のようなオプションを付けて起動した。
$ ./mysqld_safe --user=mysql --key_buffer_size=860MB --table_cache=512 \ --sort_buffer_size=128MB --read_buffer_size=100M --read_rnd_buffer_size=96MB \ --myisam_sort_buffer_size=128MB --thread_cache_size=64 --query_cache_size=256MB
sql-benchは実行にPerlおよびDBIモジュールが必要である。今回テストに使用したDebian GNU/Linuxの場合、次のようにして必要なモジュールのインストールが行える。
# apt-get install libdbd-mysql-perl
また、実行結果はベンチマークを実行したディレクトリ以下の「output」ディレクトリ内に保存されるので、あらかじめこのディレクトリを作成し、ベンチマークを実行するユーザーが書き込めるようにパーミッションを設定しておく。
sql-benchディレクトリ中の「run-all-tests」を実行することでベンチマークが開始される。
$ cd sql-bench $ ./run-all-tests