あけましておめでとうございます。
今年こそは更新さぼらないようにしようと思います。
(その分内容は少し薄くなるかもしれないですが)
今回はMySQLのステータス取得についてです。
主にパフォーマンスチューニングで使われるツールたちを並べてみました。
1. SHOW GLOBAL STATUS\G 2. SHOW ENGINE INNODB STATUS\G 3. SHOW FULL PROCESSLIST; 4. スロークエリログ(performance_schema.events_statements_summary_by_digest)
これらはまずエースといって間違いないでしょう。
1~3は古くからあるコマンドですので、見方などはググればすぐ出てきます。
SHOW GLOBAL STATUSはその断面での情報しか得られないので、定期取得する必要がある点に注意です。
この点、SHOW PROCESSLISTも同じです(こちらは見るからに断面の情報なので間違えることはないと思いますが)
蛇足ですが、SHOW ENGINE INNODB STATUSは、SHOW ENGINE XXX STATUSコマンドの1つであるらしく、
例えばSHOW ENGINE performance_schema STATUSというコマンドもあります。
P_Sの使用メモリが見れたりする(performance_schema.memory)します。
4のスロークエリはその名の通り、遅いクエリが書かれます。
「遅い」の閾値はlong_query_timeです。
(確か5.7から導入された)events_statements_summary_by_digestは、
スロークエリログの代用として使えるもので、
単なるログの垂れ流しではなく、テーブル(またはテーブルライク)なので、かなり便利げです。
mysqldumpslowを使ってスロークエリログを整形して・・・
という手間が省けるので、
スロークエリからこちらに乗り換えてもいいかもしれませんね。
また、1~3プラスアルファをまとめて取得してくれるdiagnosticsというプロシージャがsysスキーマに存在します。
まだあまり使ったことはないですが、
かなり有用そうなので今度使ってみようと思っています。
以下もスタメンなのは確定です。
5. OS性能情報(sar、iostat、vmstatなど) 6.SHOW SLAVE STATUS\G 7. EXPLAIN
5は言わずもがなですね。
6はレプリケーション環境では必須です。
遅延がないか、レプリケーション障害が発生していないか、などはここから見ます。
7は問題となるクエリが明らかになったらとりあえずやっておいて損はないと思います。
必要なインデックスが存在しない(存在していても列の指定順が違うなどの理由で使えていない)、
インデックスがあるのにテーブルフルスキャンを選択している、など、
オプティマイザ関連での問題は、簡単なものならここから明らかになります。
EXPLAINの読み方は、WEBでは漢のコンピューター道や、
書籍では詳解MySQL5.7がおすすめです。
(どちらも同じ方が書かれたものですが笑)
他にもプロファイルをとるなど、ツールはありますが、
まずはこれらを使いこなせるようになれば、
相当のことはわかります。
もちろん、システム全体としてはNWが遅い、ディスク障害、クライアントサイドの処理が遅いだけ、など、
パフォーマンス問題の種は尽きないので、
切り分けが終わったうえで、正しくこれらのツールを使っていけば、
もしかしたら幸せになれるかもしれません。