Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


5.4.1.5 クエリーキャッシュプローブ

クエリーキャッシュプローブは、いずれかのクエリーを実行するときに起動します。query-cache-hit クエリーは、クエリーがクエリーキャッシュ内に存在するときにトリガーされ、クエリーキャッシュ情報を返すために使用できます。引数には、元のクエリーテキストおよびクエリーについてクエリーキャッシュから返される行数が格納されます。クエリーがクエリーキャッシュ内に存在しないか、クエリーキャッシュが使用可能でない場合、query-cache-miss プローブが代わりにトリガーされます。

query-cache-hit(query, rows)
query-cache-miss(query)
  • query-cache-hit: クエリーがクエリーキャッシュ内に見つかったときにトリガーされます。最初の引数 query にはクエリーの元のテキストが格納されます。2 番目の引数 rows は、キャッシュされたクエリー内の行数を格納する整数です。

  • query-cache-miss: クエリーがクエリーキャッシュ内に見つからなかったときにトリガーされます。最初の引数 query にはクエリーの元のテキストが格納されます。

クエリーキャッシュプローブをメインクエリーのプローブと最適に組み合わせることによって、指定されたクエリーについてクエリーキャッシュを使用したときと使用しないときの時間の違いを調べることができます。たとえば、次の D スクリプトでは、クエリーおよびクエリーキャッシュ情報を組み合わせて、モニター中に出力される情報となります。

#!/usr/sbin/dtrace -s

#pragma D option quiet

dtrace:::BEGIN
{
   printf("%-20s %-20s %-40s %2s %-9s\n", "Who", "Database", "Query", "QC", "Time(ms)");
}

mysql*:::query-start
{
   self->query = copyinstr(arg0);
   self->connid = arg1;
   self->db    = copyinstr(arg2);
   self->who   = strjoin(copyinstr(arg3),strjoin("@",copyinstr(arg4)));
   self->querystart = timestamp;
   self->qc = 0;
}

mysql*:::query-cache-hit
{
   self->qc = 1;
}

mysql*:::query-cache-miss
{
   self->qc = 0;
}

mysql*:::query-done
{
   printf("%-20s %-20s %-40s %-2s %-9d\n",self->who,self->db,self->query,(self->qc ? "Y" : "N"),
          (timestamp - self->querystart) / 1000000);
}

スクリプトを実行すると、クエリーキャッシュの影響を理解することができます。最初は、クエリーキャッシュは無効化されています。クエリーキャッシュサイズを設定し、クエリーを複数回実行すると、クエリーデータを返すためにクエリーキャッシュが使用されていることが表示されるはずです。

shell> ./query-cache.d
root@localhost       test                 select * from t1 order by i limit 10     N  1072
root@localhost                            set global query_cache_size=262144       N  0
root@localhost       test                 select * from t1 order by i limit 10     N  781
root@localhost       test                 select * from t1 order by i limit 10     Y  0

User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.