これは何?

SoftwareDesign誌 2007/07号 特集 MySQL最前線・2007 4章 - MySQL高速化/安定化のためのチューニングテクニック - の記事中にて使用したサンプルテーブルおよびサンプルレコードを、お手軽に任意の環境にて再構築する為のPerlスクリプト集です。ご自身の環境で、記事中にて紹介している設定や手法を試した上で、応用や実践に繋げていただければ幸いです。

ダウンロード

アーカイブ内容

01_prepare/
  01_connect_db_test.pl    # DB接続確認
  02_create_test_data.pl   # データ作成
  03_create_tables.pl      # テーブル生成・データロード
02_bench/
  01_qcache_bench.pl       # Query Cache 検証
lib/
  Util.pm                  # DB接続モジュール
tmp/                       # データテキスト出力先

1. 事前準備

必要なライブラリ

本スクリプトを動かすには以下のPerl用モジュールが必要になります:

  • DBI
  • DBD::mysql

これらを入手するにはapt-getやyum等のパッケージ管理ツールを使うのが一番お手軽です。

$ apt-get install libdbd-mysql-perl
$ yum install perl-DBD-MySQL

あるいはCPANツールを使って個別にインストールしてもOKです。

$ cpan install DBD::mysql

インストールが終わったら最後に以下のコマンドを実行してみて、何かしらのエラーメッセージが出なければ、モジュールは正常にインストールされています。

$ perl -MDBD::mysql

データベースを用意する

本スクリプトはテーブルとレコードを自動生成するものですが、これらが格納されるデータベース空間は自動では作成しません。ですので、mysql標準クライアントにて下記コマンドを実行する等して、データベース softwaredesign を作成する必要があります。

$ mysql -u root mysql
mysql> create database softwaredesign;
mysql> grant all privileges on softwaredesign.* to 'myself'@'localhost';

最後のgrant文にて、myselfというユーザにデータベース利用権限を与えています。myselfの替わりにご自身のユーザ名を指定してください。

2. スクリプトを実行する

スクリプトのDB接続設定を変更する

ダウンロードしたアーカイブの中に含まれている Util.pm というモジュールをテキストエディタで開いて、データベース接続用のユーザIDやパスワードを指定しておきます。

lib/Util.pm 9-10行目

db   => 'softwaredesign',
user => 'myself',
pass => 'mypass',

データベース接続のテストをしてみる

01_prepareディレクトリにある接続テストスクリプトを実行してみる事で、データベース softwaredesign に正しく接続できるかどうかを確認できます。何かしらのエラーが出る場合はユーザ名・パスワードやDBD::mysqlモジュールが正常に導入されているか等を確認してみてください。

$ cd 01_prepare
$ perl 01_connect_db_test.pl
connect ok

テストデータを作成する

次はランダムなひらがな文字から成るテストデータ10万件をタブ区切りテキストとして作成します。次のステップでこのタブ区切りテキストをテーブルに読み込ませる事になります。このテキストはアーカイブ内の tmp ディレクトリ下に basic.txt という名前で書き出されますので、一応書き込み権限がディレクトリに付いているかを確認しておいてください。データ作成のスクリプトは以下のように実行させます。

$ perl 02_create_test_data.pl
basic table... 100000
all done

テーブルを作成してテストデータを読み込む

最後は basic という名前のテーブルを作成して、前述のテストデータを読み込みます。

$ perl 03_create_tables.pl
creating basic table
creating basic_innodb table

記事では特に利用しませんでしたが、色々とパフォーマンス検証する際に必要になるであろう Innodb 形式のテーブルも一緒に作成します。テーブル名は basic_innodb で、テーブル定義は MyISAM 版の basic テーブルと同一です。何かしらの比較検証の際にお使いください。

以上で環境再構築の作業はすべて終了です。mysql標準クライアントで basic テーブルの件数を確認してみてください。10万件のデータが入っているはずです。

mysql> SELECT count(*) FROM basic;

おまけ: Query Cache 検証

おまけとして、記事で触れたパフォーマンス向上の重要な機能 Query Cache について、3種類の設定における速度の違いを比較する為のベンチマークスクリプトを添付しておきました。

  • query_cache_type = 1 の場合
  • query_cache_type = 0 の場合
  • SQL_NO_CACHE を使った場合

それぞれにおいて、サーバのSTATUS状況がどう変わっているのかと、実際1000件のクエリを投げた際にかかる処理時間を出力します。興味あらばスクリプトの中身を参照しつつ、ご自身で何かしらのベンチマークスクリプトを書く際の参考にしていただければ幸いです。

$ cd 02_bench
$ perl 01_qcache_bench.pl

最終更新: 2007/05/06

株式会社リクルート
メディアテクノロジーラボ
石橋 利真
mail: iandeth[at]gmail.com