こんにちは、大曲です。
前回に dstatの可視化に関してお話ししましたが、
今回のMySQLの状態を可視化したのでその内容を話します。
負荷テストの概要
詳細は話せないのですが、ざっくりとこんな感じです。
1.データの取得
SHOW ENGINE INNODB STATUS のデータは、
そのままのデータとしても活用できるので、そのまま出力しました。
while true; do echo `date`; mysql -u root -e "SHOW ENGINE INNODB STATUS;" >> show_innodb_status.txt; sleep 10; done;
10秒ごとに SHOW ENGINE INNODB STATUS を実行するだけのコマンドです。
InnoDB \n=====================================\n150303 10:40:35 INNODB MONITOR OUTPUT\n=====================================\nPer second averages calculated from the last 25 seconds\n-----------------\nBACKGROUND THREAD\n-----------------\ ....
2.データの整形
素のままの SHOW ENGINE INNODB STATUS では、可視化できません。
可視化するために、まず数値化します。
数値化してグラフ表示にしています。
そのため、数値化に使われているスクリプトをそのまま流用しました。percona-monitoring-plugins
↑のサイトからダウンロードしました。
流用したスクリプトは、cacti\scripts\ss_get_mysql_stats.php です。
function get_innodb_array($text) というメソッドが
SHOW ENGINE INNODB STATUSのテキストデータを1行1行処理して、
ハッシュの配列に置き換えてくれてます。
今回は、これを利用しました。
実際のコードは、長いので下のリンクにあるので、見てみてください。
phpのスクリプト
変更点としては、以下の通りです。
SHOW INNODB STATUSの実行時間に関して。
InnoDB \n=====================================\n150303 10:40:35 INNODB MONITOR OUTPUT\n=====================================\nPer second averages calculated from the last 25 seconds\n-----------------\nBACKGROUND THREAD\n-----------------\ ....
上の内容で言うと 「 150303 10:40:35 」 が実行した時間になります。
( 2015年3月3日 10時40分35秒という内容です)
時間を取り出す処理、以下の内容を追加しました。
if (preg_match('/[0-9][0-9]:[0-9][0-9]:[0-9][0-9] INNODB MONITOR OUTPUT/', $line)) { $results['time'] = $row[0] . ' ' . $row[1]; }あとは、作ったPHPファイルを実行するだけです。
php convert_innodb_status.php "input_file" > output_file
上の内容のように実行すると、CSV形式の出力結果が出ます。
これで、数値化の完了です。
はい、簡単です!!
はい、簡単です!!
3.データの可視化
次に数値化が完成したところで、いよいよ可視化のフェーズです。
そこでRstudioの出番です。
そこでRstudioの出番です。
- InnoDB Transactions Active/Locked
- InnoDB Table In Use
- InnoDB Transactions
上のグラフは、順に負荷を上げていった時の図です。
これで、MySQL的な処理の限界が簡単に分かるようになりました。
「あー、分間XXXX件くらいの処理で性能が落ちるね~」 などなど言えます。
あとは、色々なパターンを試してみて各パターンの傾向を見て試行錯誤するだけです。
あとは、色々なパターンを試してみて各パターンの傾向を見て試行錯誤するだけです。
まとめ
やっていることは、難しくありません。
Cactiの取得する間隔を短くすれば、簡単にできます。
パターンごとの比較が出来たり、Cacti用のサービスを負荷テストのために作る必要がないことが違いかなと思います。
今回これを実装したことによって、いつでも簡単に可視化できるようになりました。
気になる時間などにシェルスクリプトを実行しておけば、
あとは出力したファイルを可視化するだけです。
あとは出力したファイルを可視化するだけです。
手軽さという点で、個人的には重宝しています。
最後に RStudioは、非常に使いやすくて凄いので皆さんも使ってみてください。
最後に RStudioは、非常に使いやすくて凄いので皆さんも使ってみてください。