小野マトペの業務日誌(アニメ制作してない篇)

はてなダイアリーの閉鎖をうけ、旧ブログ http://d.hatena.ne.jp/ono_matope/ から移行しました。続きは→ http://matope.hatenablog.com/

MySQLのクエリキャッシュヒット率を計算するワンライナー書いた

MySQLのパフォーマンスチューニングをしていて避けては通れない要素、key_buffer_size設定。
参考サイトによると、MyISAMインデックスに割り当てられるキャッシュサイズであるkey_buffer_size値は、以下のように、インデックスを利用するリクエストにおける、ディスクread数の割合から求められる"キャッシュヒット率"によって増減を決定されるらしいですが、

キーキャッシュのヒット率 = 100 - ( key_reads / key_read_requests × 100 )

DSAS開発者の部屋:5分でできる、MySQLのメモリ関係のチューニング!

この値は特に起動直後はかなり変動し、毎回SHOW STATUSして手動で計算するのが面倒くさいので、これを一発で求めるワンライナーを作りました。

キャッシュヒット率(単位:%)

mysqladmin -u root -p extended-status | grep -e Key_read_requests -e Key_reads |sort -f|paste -s|awk '{print 100-100*$4/$9}'

出力結果

94.3086

キャッシュミス率(単位:%)

mysqladmin -u root -p extended-status | grep -e Key_read_requests -e Key_reads |sort -f|paste -s|awk '{print 100*$4/$9}'

出力結果

5.6928

うむ。キャッシュミス率は0.3%以内に収めるのが理想的だそうなので、まだまだヒット率が小さいですね。key_buffer_sizeを増やした方がいいのかもしれません。