メタデータの末尾にスキップ
メタデータの先頭に移動

test

クエリリザルトキャッシュ(QRC)が有効にされると、やってくるクエリはパースする前にクエリキャッシュにあるクエリと比較されます。やってくるクエリがQRCに存在する場合は、QRCの結果が送信されます。プリペアードステートメントもサポートされています。他のキャッシュに比べてQRCの場合は、キャッシュのヒット率は一般的に80%以下です。なぜなら:

  • QRCは結果を提供するために全く同じクエリを必要とします
  • もしテーブルが修正されると、たとえ修正が結果セットを全く変更しないとしても、QRCの中のテーブルから派生した全ての結果セットは無効にされます。

QRCの結果の利用を有効にするために、クエリは完全に同じでなければなりません。

以下の二つのクエリを考えて見ましょう:

select * from table foo;
SELECT * from table foo;

これらのクエリの両方は違うものと見なされます。従ってQRCの結果は使われないでしょう。

以下の図はQRCの判定フローを説明します:

QRCの有効化と監視

QRCを有効にするには、以下のコマンドを目的のマシーン上のコマンドプロンプトから発行します:

mysql> set global qrc_enabled = true;

QRCグローバル変数の理解

変数

説明

デフォルト

qrc_enabled

QRCを有効または無効にします。例には以下を見てください。

false

qrc_entry_max_size

エントリーのために許された最大のサイズをバイトで指定します。

131072

qrc_max_size

QRC全体のための最大サイズをバイトで設定します。

524288

qrc_timer_delay_ms

QRCタイマーの遅延を設定します。DDLでテーブルが変更された場合は、テーブルに関するQRCエントリは qrc_timer_delay_ms が発散するまで無効です。この設定は通常変更されません。

2000

QRCステータスの理解

以下のQRCに関係するステータスが利用可能です:

  • qrc_count - どれだけの数のクエリがキャッシュされているか?
  • qrc_hits - どれだけの数のキャッシュされたクエリが一致したものとして評価されたか?
  • qrc_misses - どれだけの数のキャッシュされたクエリが一致しないものとして評価されたか?
  • qrc_size - QRC全体でどれだけの大きさがあるか?
  • qrc_uncaheable - QTRCはキャッシュ可能か?
  • uptime - どれだけ長い間キャッシュが存在しているか?

QRCの有効化の動機

QRCの使用を決めるのはデータに依存します。If all the queries you are performing are simple (such as selecting a row from a table with one row), but still differ so that the queries cannot be cached, the overhead for having the query cache active is about 10%. これは最悪のシナリオと見なされるかも知れません。実生活では、クエリはもっと複雑になり勝ちであり、オーバーヘッドは通常とても小さくなります。

一行だけのテーブルの中の一行の検索はクエリキャッシュ無しよりも有りのほうが2倍速いです。This can be regarded as close to the minimum speedup to be expected for a query that is cached.

QRCのにキャッシュされないものは何か?

以下の項目はキャッシュされません:

  • 動的に生成されたコメント(例えば、ORM)、余分な空白、およびQRCのミスに繋がる様々な場合
  • システムテーブル
  • 純粋なSELECT文はキャッシュされます。SHOW, INSERT, ALTErなどのその他の全ての文はキャッシュされません。
  • ユーザ定義関数またはストアド関数を参照するクエリ
  • ユーザ変数またはローカルに保存されたプログラム変数を参照するクエリ
  • 一時テーブルを参照するクエリ
  • テーブルを使わないクエリ、例えば SELECT 1+1...
  • 警告を生成するクエリ
  • データが同じであれば何度クエリが実行されたとしても完全に同じ結果が提供されるクエリだけが、キャッシュされます。以下のものを含む場合にはクエリはキャッシュされないでしょう:
  • BENCHMARK()
  • CONNECTION_ID()
  • CONVERT_TZ()
  • CURDATE()
  • CURRENT_DATE()
  • CURRENT_TIME()
  • CURRENT_TIMESTAMP()
  • CURTIME()
  • DATABASE()
  • FOUND_ROWS()
  • GET_LOCK()
  • 一つのパラメータありの ENCRYPT()
  • LAST_INSERT_ID()
  • LOAD_FILE()
  • MASTER_POS_WAIT()
  • NOW()
  • RAND()
  • RELEASE_LOCK()
  • SLEEP()
  • SYSDATE()
  • パラメータ無しの UNIX_TIMESTAMP()
  • USER()
  • UUID()
  • UUID_SHORT()
TOP
inserted by FC2 system