MySQLをActive-Active構成で使う

2009年10月21日(水)
菊池 研自

5.MySQL Cluster、高速化のトレンド1

 これまでもMySQL Clusterを採用することでスループットが高く遅延の少ないデータベースを構築することができましたが、最新のMySQL Cluster 7.0からは、さらに、小規模なシステムから開始しサービスを継続しながらクラスタ全体を停止することなく段階的にスケールアップできることが可能になっています。このような実用的な機能が次々と追加されていくMySQL Clusterですが、ここでは連載テーマ「データベースの高速化」に沿って、最新MySQL Cluster 7.0に採用された主なデータベース高速化の技術を紹介していきます。

 MySQL Cluster 7.0に採用された1つ目の高速化技術は、データノードのマルチスレッド化です。MySQL Cluster 7.0では、データノードプロセスが単一ホスト上の複数のCPUコア、スレッドを最大8つまで有効に活用することができるようになっています。

 従来、ndbdという専用モジュールを起動することでデータノードを動作させていましたが、マルチスレッド化されたモジュールの実行にはndbmtdという別のモジュールを実行します。このndbmtdは、ほぼすべての面でndbdと変わらず、ndbdが作成したデータファイルが存在する状態で実行しても既存データをそのまま利用することができます。

 このndbmtdを効率よく利用するには、MySQL Clusterの設定ファイルであるconfig.iniの「MaxNoOfExecutionThreads」パラメータに、データノードとなるホストが提供するCPUに適したスレッド数を指定する必要があります。このパラメータを指定しない場合、ndbmtdはシングルモードで実行され、ndbdと同様の動作となってしまいます。

 現在の「MaxNoOfExecutionThreads」パラメータの推奨値は、次の通りです。

6.MySQL Cluster、高速化のトレンド2

 2つ目の高速化技術は、大量レコードに対する通信処理の向上です。これまでMySQL Clusterのパフォーマンスは、ノード間通信に用いられるメッセージによって制限されることがありました。MySQL Cluster 7.0からは、これまで最大100Bytesに制限されていたデータノードへ送信されるリクエストのサイズが32KBytesとなり、複雑なリクエストを扱うメッセージの分割や再構築といったパケットレベルでのオーバーヘッドを少なく抑えることができるようになっています。

 また、MySQL Cluster 7.0からは、これまでデータノードへ送信される検索対象カラムのリストと、データノードからの応答カラムが4Bytesにパックされていた制限が取り除かれ、より効率的なメッセージ通信が行われるように変更されています。これらの通信処理の改善は、大きなサイズのメッセージをやり取りする場合や、クラスタ構成が大きくなりノード間を行き来するトラフィックが増加する場合に効果をもたらします。

 ここまで、MySQL Clusterのアーキテクチャー概要からMySQL Enterprise Serverと違い、また高速化への取り組みまでを紹介してきました。今回の連載第3回を通して、MySQL Clusterが持つ独特な一面も見えてきたのではないでしょうか。いよいよ最終回となる次回第4回は、今秋何かと話題のデータウエアハウス「Oracle Exadata」を取り上げます。

伊藤忠テクノソリューションズ株式会社
ITエンジニアリング室 ミドルウエア技術部 DB技術課所属。2005年に伊藤忠テクノソリューションズ(CTC)入社。入社後はOSS担当エンジニアとして、ソフトウエアの仕様確認、性能検証などを経験。2006年ごろよりMySQL関連案件のプリセールスや構築支援に携わる。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています