MySQL Cluster でもフラッシュドライブを活用してみる

MySQL Cluster でも
フラッシュドライブを活用してみる
日本ヒューレット・パッカード株式会社
テクノロジーコンサルティング事業統括
オープンソース部
高橋 智雄
2014年6月25日
© Copyright 2014 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.
自己紹介




2
氏名:高橋 智雄
所属:日本ヒューレット・パッカード株式会社
仕事:データベース関連のコンサルタント
Oracle Databaseのトラブル対応やチューニングなど。
最近はオープンソースのDBMSも。
今年:PostgreSQL/Postgres Plus検証
MySQL Cluster検証①(←今日の話)
Oracle RAC提案
MS SQL Server PDWソリューション開発
MySQL Cluster検証②(←HP Moonshot System使いました)
Vertica構築
MySQL Cluster提案
Oracle RAC構築
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
はじめに
本書は2014年1月に実施した、 HP ProLiant BL460c Gen8上でMySQL Cluster
7.3を動作させた性能検証結果をまとめたものです。
検証では、 MySQL Cluster のパラメータチューニングによる性能向上や、PCIe直
結のフラッシュドライブ、HP IOアクセラレータにより、MySQL Clusterのディスク
テーブルの性能が劇的に向上することの検証などを行いました。
本検証にあたり、日本オラクル株式会社殿、フュージョンアイオー株式会社殿
に多大なるご協力をいただいたことに、厚く御礼いたします。
3
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
アジェンダ
1. 検証環境
2. 検証内容
3. メモリテーブルにおけるパラメータチューニングの効果
4. ディスクテーブルにおけるIOアクセラレータの効果
5. まとめ
4
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
1. 検証環境
© Copyright 2014 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.
2-2.検証環境構成イメージ
ProCurve 6120XG
ブレードスイッチ×2
10Gbit Ethernet
BL460c Gen8×6
IO アクセラレータ
Blade用メザニン
管理ノード#1
管理ノード#2
ベンチマークツール
データノード#1
データノード#2
MySQL Cluster
6
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
SQLノード#1
SQLノード#2
1-2.検証環境ハードウェア/ソフトウェア構成
ハードウェア サーバー
HP ProLiant BL460c Gen8
CPU
Intel® Xeon® Processor E5-2690 2.9Ghz 20MB Cache 2P/16Core
メモリ
64GB (8 x 8GB) DDR3 1600MHz RDIMMs
ディスク
コントローラ
HP Smart Array P220i Controller with 512MB Flash-Backed Write Cache
(FBWC)
内蔵HDD
HP 300GB 6G SAS 15K 2.5in HDD × 2 (RAID1)
NIC
HP FlexFabric 10Gb 2P 554FLB FIO Adptr
フラッシュ
ドライブ
HP 1.2TB MLC BladeSystem IO アクセラレータ
(データノードのみ搭載。 Factory Capacity (100%)でフォーマット)
OS
RedHat Enterprise Linux 6.4 (kernel 2.6.32-358)
IOアクセラレータドライバー
iomemory-vsl 3.2.4
MySQL Cluster
MySQL Cluster 7.3.3
7
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
2. 検証内容
© Copyright 2014 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.
検証目的
 パラメータチューニングによる効果測定
 MySQL Clusterには一般的なRDBMSよりもパラメータが多く存在
 適切に設定することによりパフォーマンスが大きく向上することを確認
 フラッシュドライブを使用した場合のディスクテーブルの性能検証
 ディスクテーブルはメモリテーブルに比較して遅いといわれている。
 ディスクテーブル用のストレージにフラッシュドライブである
IOアクセラレータを使用すると性能が向上することを確認
9
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
性能測定方法
 測定方法
 sysbenchのcomplexモードを使用して測定
 管理ノード上でsysbenchを実行
 sysbench実行中のサーバーリソース使用状況を sarコマンドで取得
 測定条件(以下を変更して性能測定)
 SQLノード数:1、2 (SQLノード数に従い、sysbenchクライアントを複数起動
して、各SQLノードに負荷をかける)
 sysbench実行スレッド数(負荷の大きさに相当)
 レコード数:チューニング検証では100万行、
ディスクテーブル検証では1億行
 テーブル領域:メモリ、ディスク
10
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
3.メモリテーブルにおける
パラメータチューニングの効果
© Copyright 2014 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.
性能測定条件(1/2)
 全データをメモリテーブルに配置しsysbenchの測定を実施
項目
12
説明
データ量
• sysbenchのパラメータ --oltp-table-size=1000000 を指定
• メモリ使用量
 DataMemory : 約230MB
 IndexMemory :約15MB
メモリ関連
パラメータ
• DataMemory=8G
• IndexMemory=8G
ファイルシステム
ext4
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
性能測定条件(2/2)
 データ、LCP、GCP、UNDO配置デバイス
13
データ
メモリ
LCP
HDD
GCP
HDD
UNDO
- (メモリテーブルのみのため不使用)
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
ほぼデフォルト状態の測定結果
ほぼデフォルト
13,500
 SQLノード数を1台から2台に増や
しても性能はほとんどかわらない。
12,000
10,500
TPS
9,000
 MaxNoofExecutionThreadsが
デフォルトのままなので、データ
ノードのCPUが効率的に使われ
ずボトルネックになっている。
7,500
6,000
4,500
3,000
1,500
0
0
20
40
60
80
100
120
sysbench スレッド数
Read Only - 1Client - 1SQLnode
Read Only - 2Clients -2SQLnodes
14
Read Write - 1Client - 1SQLnode
Read Write - 2Clients -2SQLnodes
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
リソース使用状況 ~ほぼデフォルト~
データノードのndbmtdスレッド数の設定がデフォルト(2)のままのため、
sysbenchスレッド数が増えてもCPUの多くは使われていない状態。
15
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
MaxNoofExecutionThreads を16に設定
MaxNoofExecutionThreads=16
13,500
 SQLノード1台の性能は
ほぼデフォルト状態と同じ
12,000
10,500
TPS
9,000
7,500
 SQLノードを2台に増やすと
約1.7倍のスループットに向上
6,000
4,500
3,000
1,500
0
0
20
40
60
80
sysbench スレッド数
Read Only - 1Client - 1SQLnode
Read Only - 2Clients - 2SQLnodes
16
100
120
Read Write - 1Client - 1SQLnode
Read Write - 2Clients - 2SQLnodes
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
ThreadConfigを設定して、さらに細かくチューニング
ThreadConfigを調整
13,500
 SQLノード1台の性能は
ほぼデフォルト状態と同じ
12,000
10,500
9,000
TPS
7,500
 SQLノードを2台に増やすと
約2倍のスループットに向上
6,000
4,500
3,000
1,500
0
0
20
40
60
80
sysbench スレッド数
Read Only - 1Client - 1SQLnode
Read Only - 2Clients - 2SQLnodes
17
100
120
Read Write - 1Client - 1SQLnode
Read Write - 2Clients - 2SQLnodes
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
リソース使用状況~ThreadConfig調整後~(1)
データノード
データノードはCPUが平均して使用されるようになった。
使用率自体はそれほど高くないので、SQLノードがボトルネック?
18
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
リソース使用状況~ThreadConfig調整後~(2)
SQLノード
%sysが高い
SQLノードはsysbenchのスレッド数の増加に従い、使用するCPUが増えている。
CPU使用率の中では%sysの割合が高い。
19
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
ndb-cluster-connection-poolを8に設定
ndb-cluster-connection-pool=8
13,500
 SQLノード1台の性能は
ほぼデフォルト状態の2倍以上
12,000
10,500
TPS
9,000
7,500
 SQLノードを2台に増やすと
さらに約2倍のスループットに向上
6,000
4,500
3,000
1,500
 最大でチューニング前の4倍以上!
0
0
20
20
40
60
80
sysbench threads
100
120
Read Only - 1Client - 1SQLnode
Read Write - 1Client - 1SQLnode
Read Only - 2Clients - 2SQLnodes
Read Write - 2Clients - 2SQLnodes
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
リソース使用状況~ndb-cluster-connection-pool調整後~(1-1)
データノード
21
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
リソース使用状況~ndb-cluster-connection-pool調整後~(1-2)
データノード
データノードのCPUは効率よく使用されている
22
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
リソース使用状況~ndb-cluster-connection-pool調整後~(2-1)
SQLノード
23
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
リソース使用状況~ndb-cluster-connection-pool調整後~(2-2)
SQLノード
%sysの割合
が低下
SQLノードのCPUも効率よく使用されるようになった
24
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
チューニングによる応答時間の変化
20
40
60
80
100
120
sysbench スレッド数
100
90
80
70
60
50
40
30
20
10
0
応答時間(ミリ秒)
応答時間(ミリ秒)
応答時間(ミリ秒)
0
ndb-cluster-connection-pool調整後
ThreadConfig調整後
ほぼデフォルト
100
90
80
70
60
50
40
30
20
10
0
0
20
40
60
80
100
100
90
80
70
60
50
40
30
20
10
0
120
sysbench スレッド数
Read Only - 1Client - 1SQLnode
Read Write - 1Client - 1SQLnode
Read Only - 2Clients -2SQLnodes
Read Write - 2Clients -2SQLnodes
Read Only - 1Client - 1SQLnode
Read Write - 1Client - 1SQLnode
Read Only - 2Clients - 2SQLnodes
Read Write - 2Clients - 2SQLnodes
高負荷時の応答時間は1/4に短縮!
25
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
0
20
40
60
80
100 120
sysbench スレッド数
Read Only - 1Client - 1SQLnode
Read Write - 1Client - 1SQLnode
Read Only - 2Clients - 2SQLnodes
Read Write - 2Clients - 2SQLnodes
(参考)チューニング後のconfig.ini(1/2)
[ndbd default]
NoOfReplicas=2 # Number of replicas
DataMemory=8G # How much memory to allocate for data storage
IndexMemory=8G # How much memory to allocate for index storage
#MaxNoOfExecutionThreads=16
ThreadConfig=ldm={count=12,cpubind=1,2,3,4,5,6,7,8,9,10,11,12},main={cpubind=0},io={cpubind=0},
rep={cpubind=0},tc={count=2,cpubind=12,13},recv={count=1,cpubind=14}, send={count=1,cpubind=15}
MaxNoOfConcurrentTransactions=16384
MaxNoOfConcurrentOperations=5000000
MaxNoOfConcurrentScans=500
NoOfFragmentLogFiles=8
FragmentLogFileSize=1G
RedoBuffer=64M
TimeBetweenLocalCheckpoints=25
LockPagesInMainMemory=1
Odirect=1
RealtimeScheduler=1
26
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
← 実際は1行
(参考)チューニング後のconfig.ini(2/2)
[ndb_mgmd]
NodeId=1
hostname=192.168.0.3
datadir=/var/lib/mysql-cluster/mgm
[ndb_mgmd]
NodeId=2
hostname=192.168.0.4
datadir=/var/lib/mysql-cluster/mgm
[ndbd]
NodeId=10
hostname=192.168.0.1
datadir=/var/lib/mysql-cluster/data1
[ndbd]
NodeId=11
hostname=192.168.0.2
datadir=/var/lib/mysql-cluster/data
[mysqld]
NodeId=50
[mysqld]
・・・・後略
27
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
(参考)チューニング後のmy.cnf
[mysqld]
ndbcluster
# run NDB storage engine
log-error=/var/log/mysql/error.log
max_connections=1000
ndb-cluster-connection-pool=8
[mysql_cluster]
ndb-connectstring=192.168.0.3
ndb-connectstring=192.168.0.4
28
# location of management server
# location of management server
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
4. ディスクテーブルにおける
IOアクセラレータの効果
© Copyright 2014 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.
HP IOアクセラレータとは
PCIe直結のNANDフラッシュストレージ。多くのシステムで、高い成果を実現。
某ゲーム会社 : データベース
データベースのスループットを3.5倍向上
某製造業 : HPC
製品開発における構造解析性能を
2倍に向上し、開発生産性を向上
30
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
某Webサービス会社 : データベース
データベースサーバーの
データ同期時間を30倍高速化
某コンテンツ配信会社 : キャッシュ
動画配信キャッシュサーバーを
1/4に削減し、省電力化を実現
性能測定条件(1/2)
 データをメモリテーブルに配置したケースと、ディスクテーブルに配置したケースで
sysbenchの結果を比較
 ディスクテーブルは、ストレージに内蔵HDDを使用するケースと、IOアクセラレータを使
用するケースの性能測定
項目
31
説明
データ量
•
•
sysbenchのパラメータ --oltp-table-size=100000000 を指定
メモリ使用量
 DataMemory : 約23GB
 IndexMemory : 約1.3GB
メモリ関連
パラメータ
•
•
•
DataMemory=28G
IndexMemory=1800M
DiskPageBufferMemory=2048M(全データがキャッシュされない値
に設定)
ファイルシステム
HDD、IOアクセラレータともにext4で統一
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
性能測定条件(2/2)
 データ、LCP、GCP、UNDO配置デバイス
メモリテーブル
ディスクテーブル
(IOアクセラレータ)
ディスクテーブル
(HDD)
メモリ
ディスクテーブル
(IOアクセラレータ)※
ディスクテーブル
(HDD)※
LCP
HDD
IOアクセラレータ
HDD
GCP
HDD
IOアクセラレータ
HDD
UNDO
-(不使用)
IOアクセラレータ
HDD
データ
※MySQL Clusterの仕様上、インデックス及びインデックスがついている列はメモリ上に配置される
32
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
データ配置デバイスによる 測定結果比較
スループット
応答時間
100
12,000
90
10,500
80
応答時間(ミリ秒)
13,500
9,000
TPS
7,500
6,000
4,500
3,000
1,500
70
60
50
40
30
20
10
0
0
0
20
40
60
80
0
20
sysbench threads
Memory - Read Only
IOA - Read Write
Memory - Read Write
HDD - Read Only
40
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
80
sysbench スレッド数
IOA - Read Only
HDD - Read Write
Memory - Read Only
IOA - Read Write
Memory - Read Write
HDD - Read Only
IOアクセラレータをメモリと比較するとスループットが1/3、
応答時間は1.5倍程度(HDDは比較にならない)
33
60
IOA - Read Only
HDD - Read Write
リソース使用状況~データノード~(1)
64スレッド(Read Only)におけるリソース使用状況
iowaitで待機
IOアクセラレータ使用時は、CPUのiowait時間は発生していない
34
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
リソース使用状況~データノード~(2)
Memory
ネットワーク
使用帯域(MB/sec)
ディスク
IOA
HDD
rx
103.0
27.0
1.6
tx
550.5
130.0
7.3
tps
53.4
14,617.5
767.5
rd_sec/s
0.0
934,109.4
47,788.2
wr_sec/s
882.9
490.5
289.0
avgqu-sz
0.0
2.8
4.5
await(ms)
0.7
0.2
5.8
util%
1.6
96.5
97.4
IOAはHDDの20倍のREAD性能(スループットの性能比とほぼ一致)
35
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
リソース使用状況~SQLノード~(1)
64スレッド(Read Only)におけるリソース使用状況
36
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
リソース使用状況~SQLノード~(2)
Memory
ネットワーク
使用帯域(MB/sec)
ディスク
IOA
HDD
rx
367.0
244.1
12.6
tx
37.4
26.7
1.6
tps
-
-
-
rd_sec/s
-
-
-
wr_sec/s
-
-
-
avgqu-sz
-
-
-
await(ms)
-
-
-
util%
-
-
-
SQLノードのリソースはボトルネックになっていない
37
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
IOアクセラレータが効果的なケース
それほど性能要求が高くないシステムで、たとえばデータ量が1TBの場合
 必要メモリ量は2TB+α(NoofReplicas=2とする)
 1サーバーに256GBのメモリを搭載すると想定
 データノードは10台前後必要
このケースで1.2TB IOアクセラレータを使うと
 データノードは2台でOK
データ量が多くメモリのみではサーバー数が多くなりすぎるケースに効果的!
38
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
(参考)config.ini(1/2)
[ndbd default]
NoOfReplicas=2 # Number of replicas
DataMemory=28G # How much memory to allocate for data storage
IndexMemory=1800M # How much memory to allocate for index storage
修正
#MaxNoOfExecutionThreads=16
ThreadConfig=ldm={count=12,cpubind=1,2,3,4,5,6,7,8,9,10,11,12},main={cpubind=0},io={cpubind=0},
rep={cpubind=0},tc={count=2,cpubind=12,13},recv={count=1,cpubind=14}, send={count=1,cpubind=15}
MaxNoOfConcurrentTransactions=16384
MaxNoOfConcurrentOperations=5000000
MaxNoOfConcurrentScans=500
NoOfFragmentLogFiles=8
FragmentLogFileSize=1G
RedoBuffer=64M
TimeBetweenLocalCheckpoints=25
LockPagesInMainMemory=1
Odirect=1
RealtimeScheduler=1
DiskPageBufferMemory=2048M
SharedGlobalMemory=2048M
TransactionDeadlockDetectionTimeout=12000
NoOfFragmentLogParts=12
DiskCheckpointSpeed=1000M
DiskCheckpointSpeedInRestart=1000M
DiskIOThreadPool=4
TimeBetweenEpochsTimeout=32000
39
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
追加
← 実際は1行
(参考)config.ini(2/2)
[ndb_mgmd]
NodeId=1
hostname=192.168.0.3
datadir=/var/lib/mysql-cluster/mgm
[ndb_mgmd]
NodeId=2
hostname=192.168.0.4
datadir=/var/lib/mysql-cluster/mgm
[ndbd]
NodeId=10
hostname=192.168.0.1
datadir=/var/lib/mysql-cluster/data1
[ndbd]
NodeId=11
hostname=192.168.0.2
datadir=/var/lib/mysql-cluster/data
[mysqld]
NodeId=50
[mysqld]
・・・・後略
40
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
(参考)my.cnf
[mysqld]
ndbcluster
# run NDB storage engine
log-error=/var/log/mysql/error.log
max_connections=1000
ndb-cluster-connection-pool=8
[mysql_cluster]
ndb-connectstring=192.168.0.3
ndb-connectstring=192.168.0.4
41
# location of management server
# location of management server
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
5.まとめ
© Copyright 2014 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.
まとめ
43
 パラメータチューニングによる性能向上
 データノード
 ndbmtdを使用する
 CPU関連のパラメータ(MaxNoofExecutionThreads、あるいは
ThreadConfig)を必ず設定する。
データノード専用サーバーの場合、搭載コア数を設定
 SQLノード
 ndb-cluster-connection-pool を設定する
コア数に応じて4~8程度に設定
 IOアクセラレータを使用したディスクテーブル
 メモリテーブルの1/3のスループット、応答時間は1.5倍
 データ量が多く、メモリのみではサーバー数が多くなりすぎる場合に
使用を検討
© Copyright 2014 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice.
ご清聴ありがとうございました
© Copyright 2014 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.