MySQLをActive-Active構成で使う
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」を取り上げます。