【コラム】

Yet Another 仕事のツール

52 PostgreSQLとMySQLのベンチマークテスト(2) - mysqlbench

    鶴田展之  [2005/02/02]

    前回に引き続き、今回もデータベースのベンチマークテストということで、MySQLの性能測定をやってみよう。今週のツールは、pgbenchをMySQL用に移植した「mysqlbench」だ。pgbenchのMySQLへの移植は以前にも行われたことがあるようだが、今回、日本MySQLユーザ会で新たに書き直されたコードを頂いたので、テストを兼ねてこれを使ってみたい。なお、mysqlbenchは動作検証が済み次第、なんらかの形で公開される予定とのことだ。

    当たり前だが、ソースコードで提供されるmysqlbenchを使用するには、これをコンパイルして実行ファイルを作成する必要がある。コンパイルには、MySQLのスレッドセーフなクライアントライブラリである「libmysqlclient_r.so」が必要とのことなので、MySQLのライブラリディレクトリにlibmysqlclient_r.soが無い場合は、あらかじめconfigureオプション「--enable-thread-safe-client」を指定してMySQLをビルドしなおしておく。

    # ./configure --enable-thread-safe-client --with-charset=binary

    あとは、お約束のmake; make installを実行すれば、libmysqlclient_r.soが用意されるはずだ。これでmysqlbenchをコンパイルする準備が整った。次は、mysqlbenchのMakefileを編集し、ライブラリやヘッダファイルのありかを設定しよう。

    CC = gcc
    CFLAGS = -g -O2 -D_REENTRANT
    LDFLAGS =
    MYSQL_INCLUDE= -I/usr/local/include/mysql ← ヘッダファイルが置かれたINCLUDEディレクトリを指定
    MYSQL_LFLAGS= -L/usr/local/lib/mysql ← libmysqlclient_rライブラリなどがあるLIBディレクトリを指定
    MYSQL_LIBS= -lm -lz -lnsl -lcrypt
    # NORMLIB=-lmysqlclient
    PTLIBS=-lmysqlclient_r -lpthread

    Makefileへの編集を保存してmakeを実行すれば、mysqlbenchの実行ファイルが作成される。早速テストを実施してみよう。

    mysqlbenchは、pgbenchとほぼ同様の手順でベンチマークテストを行える。まずは「-i」オプションでテストデータを生成しよう。

    $ ./mysqlbench -i -U ユーザ名 -P パスワード test

    これで「test」データベースには、"accounts"、"branches"、"history"、"tellers"の4つのテーブルが作成され、accountsテーブルには10万件のテストデータも用意された。ちなみに、「-E」オプションを使用して「InnoDB」テーブル型でテストデータを作成することも可能だ。シンプルなMyISAMでも、トランザクションをサポートする本格的なInnoDBでも、目的に応じた柔軟なテストが実施できる。

    $ ./mysqlbench -i -U ユーザ名 -P パスワード -E myisam test ← MyISAMのテスト
    $ ./mysqlbench -i -U ユーザ名 -P パスワード -E innodb test ← InnoDBのテスト

    mysqlbenchも、特にオプションを指定しなければ10クライアントからの10個の問い合わせをシミュレートする。テスト結果の表示も以下の通り、pgbenchと同じだ。

    $ ./mysqlbench -U ユーザ名 -P パスワード -E myisam test


    transaction type . . . : TPC-B (sort of)
    scaling factor . . . : 1
    number of clients . . : 1
    number of transactions per client : 10
    number of transactions actually processed : 10/10
    tps ( include connections establishing) : 160.300082
    tps ( exclude connections establishing) : 270.621347

    また、「-c」でクライアント数、「-t」でトランザクション数を指定することで、高負荷時のテストも可能だ。ただ、今のところ「-S」による検索系のテストはサポートされていない。

    PostgreSQLもMySQLも、徐々に大規模かつミッションクリティカルな用途に採用していこうという動きが目立つようになってきている。オープンソースの採用現場では、担当エンジニアの経験不足を懸念されることが少なくないが、pgbenchからmysqlbenchへの移植が行われているように、共通の操作で同様のテストが行えるツールが迅速に整備されていくのも、ソースコードの再利用が可能なことの利点である。こういったツールを活用して事前に綿密な検証を行えれば、導入後のトラブルを回避する大きな助けになるはずだ。

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン