Database JUNKY

MySQL,MariaDBを中心としたブログです

MySQL クエリーキャッシュのヒット率を求めるSQL

MySQLのクエリーキャッシュのヒット率を求めるSQLを作成しました。結果キャッシュのヒット率が二割以下の場合は、キャッシュを利用しない設定のほうがパフォーマンスを出すことができます。このクエリキャッシュヒット率をSQLで求められるように作成してみました。みなさまのMySQLローカルサーバで直接実行して結果を確認してみてください

以下がクエリーキャッシュのヒット率を求めるSQLです。基本的には、show status で計算することができます。私の場合は、それすらめんどくさいので、SQLで対応しました。クエリーキャッシュのヒット率を以下の計算で求めることができます。

[shell] @QCACHE_HITS/(@QCACHE_HITS+@QCACHE_INSERTS+@QCACHE_NOT_CACHED)*100 [/shell]

・以下がクエリキャッシュヒット率を求めるSQLです。たぶん。。だけど合ってます。 [SQL]

SELECT @QCACHE_FREE_BLOCKS := VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'QCACHE_FREE_BLOCKS';

SELECT @QCACHE_FREE_MEMORY := VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'QCACHE_FREE_MEMORY';

SELECT @QCACHE_HITS := VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'QCACHE_HITS';

SELECT @QCACHE_INSERTS := VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'QCACHE_INSERTS';

SELECT @QCACHE_LOWMEM_PRUNES := VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'QCACHE_LOWMEM_PRUNES';

SELECT @QCACHE_NOT_CACHED := VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'QCACHE_NOT_CACHED';

SELECT @QCACHE_QUERIES_IN_CACHE := VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'QCACHE_QUERIES_IN_CACHE';

SELECT @QCACHE_TOTAL_BLOCKS := VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'QCACHE_TOTAL_BLOCKS';

select @QCACHE_HITS/(@QCACHE_HITS+@QCACHE_INSERTS+@QCACHE_NOT_CACHED)*100 as CACHE_HIT_RATE; [/SQL]

ちなみに、当サイトのクエリキャッシュヒット率はどうかというとこんな感じです [sql]

mysql> select @QCACHE_HITS/(@QCACHE_HITS+@QCACHE_INSERTS+@QCACHE_NOT_CACHED)*100 as CACHE_HIT_RATE; +------------------+ | CACHE_HIT_RATE | +------------------+ | 80.5282490931393 | +------------------+ 1 row in set (0.00 sec) [/sql] クエリキャッシュヒット率は80%です。すごく優秀!!(ワードプレスが・・・)