MySQL Clusterの検証をIBM(Softlayer)さん、株式会社インフィニットループさんと共同で行って、
結果を先日のCEDECで発表した時の資料です。インフィニットループさんがOpenSourceのゲームで検証してくれているので、内容的には参考になるかと思います。

1. MySQL Clusterを稼働させるにはネットワークが非常に重要
2. MySQL Clusterを稼働させる場合、仮想環境のCommit Ratioがコントロール出来ない場合はベアメタルが良い。
3. 仮想、ベアメタル共にSSDを利用していてもISCSIよりもやはりローカルの方が断然良い。
4. MaxNoOfExecutionThreadsより、ThreadConfigで丁寧に調整した方がパフォーマンス良い(この検証では1.2倍)
5. 今回のSYSBENCH0.5での検証では、データの偏りがあったので思うようにパフォーマンスが出なかった。(パーティションで対応可能)
6・ Sysbench0.5のOLTP R/Wの処理は、5割程がMySQL Cluster向きで残りの5割はInnDB向きの処理。(データノードを跨る処理が多かった)

今回は2週間でしたが、もう少し時間があればより最適なパラメータ構成を設定出来たかと思います。
皆さんも利用する場合は、事前に最適なパラメータ確認を実施して下さい。

MySQL Cluster Community Edition Download
http://dev.mysql.com/downloads/cluster/

Commercial Edition追加ツールとサポート
https://www-jp.mysql.com/products/cluster/


FIOによるディスクパフォーマンス確認
HDDも以前と比較して選択肢が増えて、必要に応じてSATA,SAS,SSD,Fusion-IO等を選択し、
用件、コスト、パフォーマンス、可用性に応じて全体的なバランスからシステムを選択する必要がある。
ディスク、CPU、メモリー、ネットワークのパフォーマンスを必要に応じて確認する必要があるが、
今回はI/Oの確認の為にディスクベンチマークをFIOで行う方法の再確認。

fio
FIOの取得

[root@HOME001 tools]# wget http://brick.kernel.dk/snaps/fio-2.0.12.1.tar.bz2
--2012-12-30 15:57:22--  http://brick.kernel.dk/snaps/fio-2.0.12.1.tar.bz2
brick.kernel.dk をDNSに問いあわせています... 87.104.106.3
brick.kernel.dk|87.104.106.3|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 244365 (239K) [application/x-bzip]
`fio-2.0.12.1.tar.bz2' に保存中

100%[==============================================>] 244,365      209K/s 時間 1.1s

2012-12-30 15:57:25 (209 KB/s) - `fio-2.0.12.1.tar.bz2' へ保存完了 [244365/244365]

[root@HOME001 tools]#

FIOの展開

[root@HOME001 tools]# tar -jxf fio-2.0.12.1.tar.bz2
[root@HOME001 tools]# ls -l
合計 704
drwxrwxr-x. 11 root  root    4096 12月 19 03:55 2012 fio-2.0.12.1
-rw-r--r--.  1 root  root  244365 12月 19 03:56 2012 fio-2.0.12.1.tar.bz2
drwxrwxrwx.  6 mysql users   4096 12月 30 13:10 2012 htop-0.8.3
-rw-r--r--.  1 root  root  428061  6月 23 23:05 2009 htop-0.8.3.tar.gz
drwxr-xr-x.  5 root  root    4096 12月 29 07:21 2012 iotop-0.4.4
-rw-r--r--.  1 root  root   30334 10月 31 06:01 2011 iotop-0.4.4.tar.gz
[root@HOME001 tools]#

必要なライブラリーを追加

[root@HOME001 fio-2.0.12.1]# yum install libaio-devel
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package libaio-devel.i686 0:0.3.107-10.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================================
 Package                            Arch                       Version                                 Repository                  Size
========================================================================================================================================
Installing:
 libaio-devel                       i686                       0.3.107-10.el6                          base                        13 k

Transaction Summary
========================================================================================================================================
Install       1 Package(s)

Total download size: 13 k
Installed size: 19 k
Is this ok [y/N]: y
Downloading Packages:
libaio-devel-0.3.107-10.el6.i686.rpm                                                                             |  13 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : libaio-devel-0.3.107-10.el6.i686                                                                                     1/1
  Verifying  : libaio-devel-0.3.107-10.el6.i686                                                                                     1/1
Installed:
  libaio-devel.i686 0:0.3.107-10.el6
Complete!
[root@HOME001 fio-2.0.12.1]#

libaio

MAKEとインストール

[root@HOME001 fio-2.0.12.1]# make
    CC gettime.o
    CC fio.o
    CC ioengines.o
    CC init.o
    CC stat.o
    CC log.o
    CC time.o
    CC filesetup.o
    CC eta.o
    CC verify.o
省略.......
    CC engines/rdma.o
    CC profiles/tiobench.o
    CC engines/fusion-aw.o
    CC engines/falloc.o
    CC engines/e4defrag.o
    CC fio
[root@HOME001 fio-2.0.12.1]#

[root@HOME001 fio-2.0.12.1]# make install
install -m 755 -d /usr/local/bin
install fio fio_generate_plots /usr/local/bin
install -m 755 -d /usr/local/man/man1
install -m 644 fio.1 /usr/local/man/man1
install -m 644 fio_generate_plots.1 /usr/local/man/man1
[root@HOME001 fio-2.0.12.1]#

fio

実際にFIOでI/Oテストを行ってみる。
fio –directory=/tmp/ –direct=1 –rw=write –bs=4k –size=512M –numjobs=2 –runtime=100 –group_reporting –name=seq-write

[root@HOME001 fio-2.0.12.1]# fio --directory=/tmp/ --direct=1 --rw=write --bs=4k --size=512M --numjobs=2 --runtime=100 --group_reporting --name=seq-write
seq-write: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
seq-write: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
fio-2.0.12.1
Starting 2 processes
seq-write: Laying out IO file(s) (1 file(s) / 512MB)
seq-write: Laying out IO file(s) (1 file(s) / 512MB)
Jobs: 2 (f=2): [WW] [100.0% done] [0K/11584K/0K /s] [0 /2896 /0  iops] [eta 00m:00s]
seq-write: (groupid=0, jobs=2): err= 0: pid=10250: Sun Dec 30 16:16:04 2012
  write: io=1024.0MB, bw=11369KB/s, iops=2842 , runt= 92231msec
    clat (usec): min=223 , max=202116 , avg=693.03, stdev=5958.70
     lat (usec): min=225 , max=202118 , avg=695.77, stdev=5958.71
    clat percentiles (usec):
     |  1.00th=[  266],  5.00th=[  274], 10.00th=[  294], 20.00th=[  306],
     | 30.00th=[  310], 40.00th=[  314], 50.00th=[  318], 60.00th=[  326],
     | 70.00th=[  350], 80.00th=[  358], 90.00th=[  362], 95.00th=[  378],
     | 99.00th=[  892], 99.50th=[ 1112], 99.90th=[99840], 99.95th=[100864],
     | 99.99th=[100864]
    bw (KB/s)  : min= 3760, max= 7072, per=49.97%, avg=5680.87, stdev=554.02
    lat (usec) : 250=0.12%, 500=96.95%, 750=1.30%, 1000=0.84%
    lat (msec) : 2=0.39%, 4=0.02%, 10=0.01%, 20=0.01%, 50=0.01%
    lat (msec) : 100=0.04%, 250=0.32%
  cpu          : usr=1.09%, sys=14.74%, ctx=267814, majf=0, minf=0
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued    : total=r=0/w=0/d=262144, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  WRITE: io=1024.0MB, aggrb=11369KB/s, minb=11369KB/s, maxb=11369KB/s, mint=92231msec, maxt=92231msec

Disk stats (read/write):
    dm-0: ios=0/262084, merge=0/0, ticks=0/243053, in_queue=243054, util=100.00%, aggrios=0/262205, aggrmerge=0/80, aggrticks=0/197656, aggrin_queue=197235, aggrutil=99.97%
  sda: ios=0/262205, merge=0/80, ticks=0/197656, in_queue=197235, util=99.97%
[root@HOME001 fio-2.0.12.1]#

fioでベンチマーク中にiotopでパフォーマンス確認
fio-test

ファイルが残っているのでマニュアルで削除する。

[root@HOME001 fio-2.0.12.1]# ls -lh /tmp/
合計 1.1G
srwxrwxrwx. 1 mysql mysql    0 12月 30 15:44 2012 mysql.sock
-rw-r--r--. 1 root  root  512M 12月 30 16:16 2012 seq-write.1.0
-rw-r--r--. 1 root  root  512M 12月 30 16:16 2012 seq-write.2.0
-rw-------. 1 root  root   254 12月 30 16:02 2012 yum_save_tx-2012-12-30-16-02d9sxpX.yumtx
[root@HOME001 fio-2.0.12.1]#

その他:参考値簡易測定
何もインストールしないで通常のDDコマンドでも簡易的な確認可能

[root@HOME001 tmp]# time dd if=/dev/zero of=tempfile_1M bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 35.9152 s, 29.9 MB/s

real    0m36.251s
user    0m0.006s
sys     0m2.802s
[root@HOME001 tmp]# time dd if=/dev/zero of=tempfile_1024M bs=1024M count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 38.0579 s, 28.2 MB/s

real    0m38.178s
user    0m0.000s
sys     0m3.910s
[root@HOME001 tmp]# ls -lh tempfile_*
-rw-r--r--. 1 root root 1.0G 12月 30 16:57 2012 tempfile_1024M
-rw-r--r--. 1 root root 1.0G 12月 30 16:57 2012 tempfile_1M
[root@HOME001 tmp]#

dd

参考
fioを用いたディスクIOのパフォーマンス測定
クラウドを加速させるSSD技術(前編)
書き込み速度ベンチマーク
容量指定のダミーファイルを作成したい


mysqlslapはMySQLサーバのクライアント負荷をエミュレートし、各ステージのタイミングを
報告する診断プログラムです。サーバにたいして複数のクライアントがアクセスしているかのように
作動します。mysqlslapはMySQL 5.1.4.から提供されています。

[root@study01 bin]# pwd
/usr/local/mysql/bin
[root@study01 bin]#./mysqlslap 
--no-defaults --auto-generate-sql --auto-generate-sql-guid-primary --engine=myisam 
--number-int-cols=3 --number-char-cols=5 --concurrency=3 --auto-generate-sql-write-number=100 
--auto-generate-sql-execute-number=1000 --auto-generate-sql-load-type=mixed  -u root -p

Enter password:
Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 0.813 seconds
        Minimum number of seconds to run all queries: 0.813 seconds
        Maximum number of seconds to run all queries: 0.813 seconds
        Number of clients running queries: 3
        Average number of queries per client: 1000

[root@study01 bin]#./mysqlslap 
--no-defaults --auto-generate-sql --auto-generate-sql-guid-primary --engine=myisam 
--number-int-cols=3 --number-char-cols=5 --concurrency=5 --auto-generate-sql-write-number=100 
--auto-generate-sql-execute-number=1000 --auto-generate-sql-load-type=mixed  -u root -p

Enter password:
Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 1.448 seconds
        Minimum number of seconds to run all queries: 1.448 seconds
        Maximum number of seconds to run all queries: 1.448 seconds
        Number of clients running queries: 5
        Average number of queries per client: 1000
[root@study01 bin]#

3つの同時接続結果

con4

5つの同時接続結果

con5

mysqlslap実行中に他のターミナルからProcessを確認してみると以下のような感じで
SQL文が実行されていた。

query

[参考URL]

7.16. mysqlslap — クライアント負荷エミュレーション


[MySQLウォッチ]第42回 性能検査ツールmysqlslapとMySQLコンファレンス報告