• 検索結果がありません。

アジェンダ MySQLデータベースにおける Fusion-io 社 iodrive 使 用 時 の 優 位 性 について 事 例 紹 介 ~Too many connections 2012 Smart Style Co.,Ltd. 2 / 25

N/A
N/A
Protected

Academic year: 2021

シェア "アジェンダ MySQLデータベースにおける Fusion-io 社 iodrive 使 用 時 の 優 位 性 について 事 例 紹 介 ~Too many connections 2012 Smart Style Co.,Ltd. 2 / 25"

Copied!
25
0
0

読み込み中.... (全文を見る)

全文

(1)

MySQLデータベースにおける

Fusion-io社 ioDrive使用時の優位性について

(2)

© © ©

© 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2 / 25

アジェンダ

• MySQLデータベースにおける

Fusion-io社 ioDrive使用時の優位性について

• 事例紹介

(3)

はじめに

• MySQLデータベースにおけるパフォーマンス向上の手段として、

ストレージ媒体をハードディスクドライブ(以下HDD)からFusion-io株式会社 ioDrive(以下ioDrive)に変更する選択肢に関して、

株式会社スマートスタイルがその有効性を検証した過程を記載し

たものです。

• 本書に記載された測定記録は、同様の構成を取った場合でも同

じ結果を保証するものではありません。

• 本書の執筆に際し全面的なご協力をいただきましたGMOイン

ターネット株式会社様、Fusion-io株式会社様に、この場を借りて

御礼申し上げます。

(4)

© © ©

© 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 4 / 25

測定緒元

CPU Intel Xeon CPU E5620 * 2

RAM 64GB

OS Red Hat Enterprize Linux 5(2.6.18)

MySQL 5.5.25-log Community Server (GPL)

HDD SAS 146GB 6台(Hardware RAID1+0)

ioDrive ioDrive Duo 320SLC 2台(Software RAID)

負荷テストツールpercona-tools tpcc-mysql

・負荷計測の直前にOSを再起動し、バッファ・キャッシュの内容をクリアする

・データベーステーブル数 9(tpcc-mysqlによる作成)

・負荷クライアントからの同時実行スレッド20(tpcc-mysqlによる実行)

・データベース起動直後から計測を行う

・tpcc-mysqlの算出するtpmCの値ではなく毎分のCom_queryの増分を計測し

QPS(Query Per Second)の推移を記録する

・測定は90分間を3回行い、値は記録された数値の平均を採用する

・メモリ関連のMySQLパラメータはHDD使用時、ioDrive使用時で同じものを使用するが、I/O関連のパラメータに関してはそれぞれの特

性が出る様チューニングを実施する

(5)

HDD + innodb_buffer_pool_size = 256M

HDD + innodb_buffer_pool_size = 256M

HDD + innodb_buffer_pool_size = 256M

HDD + innodb_buffer_pool_size = 256M

(6)

© © ©

© 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 6 / 25

HDD + Innodb_buffer_pool_size=256M

HDD + Innodb_buffer_pool_size=256M

HDD + Innodb_buffer_pool_size=256M

HDD + Innodb_buffer_pool_size=256M

0

500

1,000

1,500

2,000

2,500

3,000

3,500

4,000

4,500

5,000

0:0

0

0:0

3

0:0

6

0:0

9

0:1

2

0:1

5

0:1

8

0:2

1

0:2

4

0:2

7

0:3

0

0:3

3

0:3

6

0:3

9

0:4

2

0:4

5

0:4

8

0:5

1

0:5

4

0:5

7

1:0

0

1:0

3

1:0

6

1:0

9

1:1

2

1:1

5

1:1

8

1:2

1

1:2

4

1:2

7

1:3

0

Q

PS

90

90

90

90分の平均 4,200QPS

4,200QPS

4,200QPS

4,200QPS程度

測定開始から10

10

10

10分程度で急激

に処理量が増加し、その後緩

やかに低下する

(7)

メモリ増設 or ioDrive

or ioDrive

or ioDrive

or ioDrive化

H/Wのスケールアップとして、

1) メモリの増設(今回は割り当て量増加で代替)

2) ioDrive化

(8)

© © ©

© 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 8 / 25

HDD + Innodb_buffer_pool_size=40G

HDD + Innodb_buffer_pool_size=40G

HDD + Innodb_buffer_pool_size=40G

HDD + Innodb_buffer_pool_size=40G

0

2,000

4,000

6,000

8,000

10,000

12,000

14,000

0:0

0

0:0

3

0:0

6

0:0

9

0:1

2

0:1

5

0:1

8

0:2

1

0:2

4

0:2

7

0:3

0

0:3

3

0:3

6

0:3

9

0:4

2

0:4

5

0:4

8

0:5

1

0:5

4

0:5

7

1:0

0

1:0

3

1:0

6

1:0

9

1:1

2

1:1

5

1:1

8

1:2

1

1:2

4

1:2

7

1:3

0

90

90

90

90分平均11,500QPS

11,500QPS

11,500QPS

11,500QPS

メモリ割り当て増加前に比べて

実に2.7

2.7

2.7

2.7倍

(9)

ioDrive + innodb_buffer_pool_size=256M

ioDrive + innodb_buffer_pool_size=256M

ioDrive + innodb_buffer_pool_size=256M

ioDrive + innodb_buffer_pool_size=256M

0

2,000

4,000

6,000

8,000

10,000

12,000

14,000

16,000

0:0

0

0:0

3

0:0

6

0:0

9

0:1

2

0:1

5

0:1

8

0:2

1

0:2

4

0:2

7

0:3

0

0:3

3

0:3

6

0:3

9

0:4

2

0:4

5

0:4

8

0:5

1

0:5

4

0:5

7

1:0

0

1:0

3

1:0

6

1:0

9

1:1

2

1:1

5

1:1

8

1:2

1

1:2

4

1:2

7

1:3

0

90

90

90

90分平均

10,000QPS

10,000QPS

10,000QPS

10,000QPS程度

HDD

HDD

HDD

HDDに比べて

2.4

2.4

2.4

2.4倍程度の処理量

測定開始から2

2

2

2分間で

処理量がピークに達する

(10)

© © ©

© 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 10 / 25

ioDrive

ioDrive

ioDrive

ioDrive化よりもメモリ増設が有効なのか?

0

2,000

4,000

6,000

8,000

10,000

12,000

14,000

16,000

0:0

0

0:0

3

0:0

6

0:0

9

0:1

2

0:1

5

0:1

8

0:2

1

0:2

4

0:2

7

0:3

0

0:3

3

0:3

6

0:3

9

0:4

2

0:4

5

0:4

8

0:5

1

0:5

4

0:5

7

1:0

0

1:0

3

1:0

6

1:0

9

1:1

2

1:1

5

1:1

8

1:2

1

1:2

4

1:2

7

1:3

0

平均だけを見るとそうも考えられる

測定開始直後の大きなグラフの違い

(11)

起動直後の優位性

• メンテナンスやH/WダウンでMySQL停止

• 起動後しばらくの間レスポンスが悪く、

アプリのタイムアウトや

Too many connection発生

• mysqld起動直後はバッファが空なので、

バッファが暖まるまでは

ストレージから読み込むしかない。

(12)

© © ©

© 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 12 / 25

起動直後の優位性

0 2,000 4,000 6,000 8,000 10,000 12,000 14,000 16,000 0:00 0:03 0:06 0:09 0:12 0:15 0:18 0:21 0:24 0:27 0:30 0:33 0:36 0:39 0:42 0:45 0:48 0:51 0:54 0:57 1:00 1:03 1:06 1:09 1:12 1:15 1:18 1:21 1:24 1:27 1:30

立ち上がり直後から十分な処理量

mysqld

mysqld

mysqld

mysqld再起動直後の処理量に

悩んでいる環境にはとても有効と思える

(13)

データベースサイズごとの平均処理量

• データベースが肥大化していくほど、

処理量は低下していく

• HDDとioDriveで

(14)

© © ©

© 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 14 / 25

0 2,000 4,000 6,000 8,000 10,000 12,000 14,000 16,000 18,000

HDD HDDメモリ追加 ioDrive HDD HDDメモリ追加 ioDrive HDD HDDメモリ追加 ioDrive

DB 8GB DB 16GB DB 24GB

データベースサイズごとの平均処理量

15%

15%

15%

15%ダウン

22%

22%

22%

22%ダウン

10%

10%

10%

10%ダウン

6%

6%

6%

6%ダウン

17%

17%

17%

17%ダ

ウン

26%

26%

26%

26%ダウン

(15)

データベースサイズごとの平均処理量

• HDDを使っている場合は

DBサイズが増えるにつれ

かなりの速度で処理量が減少していく

• ioDriveを使用しているケースは

DBサイズの増加と比較して

処理量減少が圧倒的に穏やか

• DBサイズ16GBのケースでメモリの増強と比較して

ほぼ同程度、DBサイズ24GBのケースでは

メモリの増強よりも処理量向上率は高い

(16)

© © ©

© 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 16 / 25

ioDrive + innodb_buffer_pool_size=40G

ioDrive + innodb_buffer_pool_size=40G

ioDrive + innodb_buffer_pool_size=40G

ioDrive + innodb_buffer_pool_size=40G

0

10,000

20,000

30,000

40,000

50,000

60,000

0:0

0

0:0

3

0:0

6

0:0

9

0:1

2

0:1

5

0:1

8

0:2

1

0:2

4

0:2

7

0:3

0

0:3

3

0:3

6

0:3

9

0:4

2

0:4

5

0:4

8

0:5

1

0:5

4

0:5

7

1:0

0

1:0

3

1:0

6

1:0

9

1:1

2

1:1

5

1:1

8

1:2

1

1:2

4

1:2

7

1:3

0

ioDrive + メモリ

スレッドチューニングなし

ioDrive + メモリ

スレッドチューニング

チューニングなしだと

性能は半分しか出ない

(17)

まとめ

こんな方々に特にioDriveが有効だと思います。

• メンテナンス明けのレスポンス低下

• 物理的にこれ以上メモリが増設できない

• データベースサイズが大きくなりすぎて

導入当初に比べて性能劣化が大きい

• アプリケーションの修正に時間が割けない

• とにかく速さを追求したい

(18)

© © ©

© 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 18 / 25

事例紹介

最近ソーシャル関連のお客様から

お問い合わせのあった事例として

・アクセス数の増加に伴いWEBサーバを増設、

MySQLへの接続数が増えた

・イベント開催に伴いアクセスがバーストし、

MySQLへの接続数が増えた

(19)

事例紹介

• Too many connectionsとは

 アプリケーションからMySQLに接続できる数はmy.cnfで

設定されている(max_connections)

 max_connections以上の接続をしようとすると出るエ

ラー。

max_connectionsの値を増やすことで

エラーの回避は可能だが、

全体的なスループットは低下する傾向にある。

(アプリ側でリトライ処理を実装しなくて良いという

 メリットはある)

(20)

© © ©

© 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 20 / 25

Too many connections

Too many connections

Too many connections

Too many connectionsのメカニズム

threads

time

(21)

max_connections

max_connections

max_connections

max_connectionsを増やすと

• スレッドバッファ分メモリ使う

 ⇒検証環境でstraceを追ってmmap関数を調べたところ、

 1スレッド生成あたり64MB程度メモリを確保している。

  ⇒スレッドが100本生成されるなら、6GBにもなる。

• スレッド生成時にオーバーヘッドがかかる

 ⇒検証環境でstraceを追った時の待機状態になるまでの時間。

スレッドキャッシュなし .. 50ms~150ms程度

スレッドキャッシュあり .. 15ms~35ms程度

 これらがもともとのクエリの速度を圧迫する

(22)

© © ©

© 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 22 / 25

理想的な解決法

threads

time

(23)

実験

ローカルホストにLinux,Apache,MySQL,Perlの環境を作成。

abクライアントからApache越しにPerlスクリプトを叩く。

PerlスクリプトはMySQL10多重アクセスをして結果を返す。

そのターンアラウンドタイムを計測。

Perl

Perl

Perl

Apache

ab

ab

ab

MySQL

ab

ab

ab

abは3

3

3

3多重で起動

Perlは10多重で

MySQLへアクセス

(24)

© © ©

© 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 2012 Smart Style Co.,Ltd. 24 / 25

結果

0.5秒

0回/30回

クエリチューニングあり

max_connections=10

17秒

0回/30回

クエリチューニングなし

max_connections=151

6.2秒

19回/30回

クエリチューニングなし

max_connections=10

平均レスポンスタイム

Too many connections発生回数

(25)

まとめ

• max_connectionsを増やして

レスポンスが向上するケースは、

メモリ,CPU,NIC,I/Oいずれも余裕があり、

connection数だけがボトルネックになっている

ケースのみ

• max_connectionsを増やすことで、

全体のスループットが悪くなるケースもままある

• アプリ側でリトライ処理を実装しなくて良いという

メリットはあるがスループット低下のリスクも高い

• 全体的なスループットを保ちつつ状況を改善する為には

スキーマやSQLのチューニングが必須

参照

関連したドキュメント

(注)

法制執務支援システム(データベース)のコンテンツの充実 平成 13

本案における複数の放送対象地域における放送番組の

7 ) Henri Focillon, ‘L’Eau-forte de reproduction en France au XIXe siècle’, Revue de l’art ancien et moderne, 28/ 1910,

ご使用になるアプリケーションに応じて、お客様の専門技術者において十分検証されるようお願い致します。ON

ご使用になるアプリケーションに応じて、お客様の専門技術者において十分検証されるようお願い致します。ON

ご使用になるアプリケーションに応じて、お客様の専門技術者において十分検証されるようお願い致します。ON

ご使用になるアプリケーションに応じて、お客様の専門技術者において十分検証されるようお願い致します。ON