thread_cacheで劇的チューニング
たまには本業のITのネタです。
MySQLのチューニングで劇的に高速化出来たので、そのときの話を少し。
1台構成のLAMP環境で、負荷が異常に高い状態になりました。
4Coreのサーバで、CPUが常時95%~99%を推移。
負荷の高い処理をしているとはいえ、そこまでたくさんプログラムが動いているわけでもなく、4CoreのCPUと16GBのメモリ量を考えれば、もっと捌けてもいいはず。
いろいろ原因を探っていくと、どうもMySQLがボトルネックになっているようだった。
MySQLを疑ったのは、長年の勘とApacheの負荷具合をみて、判断しました。
次に、チューニングポイントを探ります。
MySQLの場合、MaxConnectionとThread数を最初に疑うのが鉄則。
メモリとCPUを活かしきれていないんだろう。と思ったのです。
で、いろいろググってみると、良さそうなページを発見。
http://www.ibm.com/developerworks/jp/linux/library/l-tune-lamp-3.html
簡単なチェックプログラムを作って、Threadの様子をチェックしていると、Thread_Cacheが常に0になっていることが判明。
MySQLはThreadを作る時に負荷が掛かりますが、作り続ける状態になると当然負荷も上がります。
それを抑えるのが、Thread_Cache。
さっそく、my.cnfにThread_cacheを設定してチューニング。
Max_used_connectionの平均値から、現時点でのMySQLへのアクセス状況を踏まえて、60程度としました。
▼設定値 thread_cache = 60
その結果が、それまで高負荷状態だったCPUも50%台に落ち着き、Load Averageも下がりました。
ここまでスカッとチューニングが効くと超快感!
仕事した気がしたよ(笑)
しばらく落ち着いててくれるといいけど。。^^;
ディスカッション
ピンバック & トラックバック一覧
[…] 先日の記事で、MySQLのチューニングのことを書きました。 チューニング直後は劇的に改善されたと思った物の、徐々にCPUが食いつぶされました。 […]