
先日、会社で外部の業者に作らせたシステムが「Windows Server 2003 + MySQL」というシステムであった。
これでデータベースエンジンはInnoDBで作っているらしいので、当然トランザクションを使う。
まぁ、システムを作る段階で、なぜWindows Serverをチョイス?という疑問があったが、Windowsベースでのアプリケーションしかつけれない会社なので、しょうがないと言えばしょうがない。。。
なお、説明しておくと、このシステムの受注範囲は、CGIスクリプトとデータベースサーバ+クライアント。
うちの会社の主幹システムは強固なものであり、CGIスクリプトはきちんとロードバランサーなどが整備された強靱なシステムで動いているので問題はない。
しかし、そのスクリプトで受けたPOSTデータを流し込むのは、ルーターやNATなどを5つぐらい通った後のネットワークに接続されたWindows ServerのMySQL。
で、本番の日に、、、、案の定、MySQLが破綻した。。。
ほとんどサービスがうまく稼働していなかったに近い・・・・(ToT)
その日以降いろいろボトルネックを調べてみるが、CGIやネットワークには全く問題がないことが分かった。
怪しいのはやはりWindows ServerとMySQL。
ということで、外部に作らせたシステムだが、自分たちでSQLの負荷テストをやってみた。
MySQLのローカルでの負荷テストツールを探してみるが、Linux用などはいろいろ見つかるものの、Windowsのバイナリーのツールがなかなか見つからなかった。
で、最終的に見つけたのが、「TG – Transaction Generator -」。
このツールは、MySQLをはじめ、Oracle、PostgreSQLなど、商用・オープンソースのリレーショナルデータベースに向けて、セッション数とトランザクション数の負荷をかけることができるツールである。
ちなみに実行した画面はこんな感じ↓
上の画面は、Linuxサーバ+MySQLという構成での画面であるが、、、、
このツールは、testdbというデータベースを作成し、スキーマとテストデータ、インデックスなどをこのツールから流し込むことができる。
ちなみに、このツールを使って、Windows Server 2003 + MySQLという構成に上記と同じテストをしてみると、こうなった。。。
テストツールとしては、セッション数100、トランザクション数100を負荷として書けているのだが、ソケット数がじわじわ増加していき、それに伴ってトランザクション数も増えている、と言う感じだ。
なんだこりゃ・・・・
ちなみにLinux+MySQLの場合は、一気に100セッション開き、一気に100トランザクション実行している。
イケテナイ。。。。
Windows+MySQLはイケテナイ。
で、この結果を発注業者にたたきつけてやった(^^;)
本番の日であるが、CGIのログでは、ピーク時、1秒間に最大で約2400のPOST送信があった、ということらしいので、いかにこのシステムが瞬時に破綻したかが分かる(笑)
う〜む・・・・
Windows+MySQLはイケテナイ。
というか、仮にこのシステムを使い続けることにした場合、どのように解決したらいいだろうか。
ご存じの方いらっしゃいましたら、ご伝授くださいませ(^^;)
こちらの記事もあわせてどうぞ!
関連書籍
- Newer: UNIQLO CALENDAR
- Older: ベビーカー購入
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.multiburst.net/ElectricBrain/2009/06/transaction-generator/trackback
- Listed below are links to weblogs that reference
- SQLの接続負荷テストに使える「Transaction Generator」 from ElectricBrain Standard





















































