先日、Twitterで嘘書いちゃったんですが。
Key_blocks_usedはちゃんと存在してました。すみません。

タイトルの件について色々見てたことのまとめです。


mysql> show variables like 'key_buffer_size';
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| key_buffer_size | 2147483648 |
+-----------------+------------+
1 row in set (0.00 sec)

MyISAMのkey_buffer_size指定です。

indexはここで確保したメモリ領域に乗ってるイメージです。(違ったらごめんなさい)


で、実際確保したメモリにどれだけデータが乗っているのか、設定変えたりしたら知りたい訳です。
利用されているメモリについては以下のパラメータを確認することで把握できます。

mysql> show status like 'Key_blocks_%';
+------------------------+---------+
| Variable_name | Value |
+------------------------+---------+
| Key_blocks_not_flushed | 0 |
| Key_blocks_unused | 0 |
| Key_blocks_used | 1714736 |
+------------------------+---------+
3 rows in set (0.00 sec)

ここで、Key_blocks_usedの値はブロック数。
1ブロックあたりのサイズは

mysql> show variables like 'key_cache_block_size';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| key_cache_block_size | 1024 |
+----------------------+-------+
1 row in set (0.00 sec)

ってことで、1024byteです。(これデフォルトみたいです)


なので、設定したメモリサイズに対しての利用率は
Key_blocks_used × key_cache_block_size / key_buffer_size


で、わかりそうです。

ヒット率とかは
mysql> show status like 'Key_read_%';
+-------------------+------------+
| Variable_name | Value |
+-------------------+------------+
| Key_read_requests | 1188521580 |
| Key_reads | 2225205 |
+-------------------+------------+
2 rows in set (0.00 sec)

とか、mMeasureとかでわかりますー。


ってことはわかったけど何でload下がらないかはさっぱりだよー汗
あとblogに書いたときの表示なんとかしたいけどいい方法ないかしら。



こーゆーのって見たら一瞬だと思うから書いておくの不毛に思えたりするけど
どっかで(もしくは誰かの)役に立つ日が来るのかな。
来なくてもいいんだろうけど。



昨日同期(ビッグバンszk氏)とも話してたけど、ミドルの理解はその先のOSの理解度に
強く依存すると思うので、そっちもっと掘り下げたい。

ふぇい。