メリットと使用上の注意
メリット:
- CPU 使用率を削減します。
- 特定のシナリオで IOPS を削減します。
- クエリ応答時間を短縮し、システムのスループットを向上させます。
使用上の注意:
- 変更頻度の低いテーブル、または静的なデータを持つテーブル。
- 繰り返し実行されるクエリ (SELECT 文)。
- 1 MB 未満の結果セット。
仕組み
ApsaraDB RDS for MySQL は、クライアントからの各 SELECT クエリに対してハッシュ値を計算します。その後、このハッシュ値を使用して、クエリキャッシュ内で一致する結果を検索します。
一致 (ヒット) が見つかった場合、結果セットはクライアントに直接返され、クエリの解析と実行はバイパスされます。
一致が見つからない場合、クエリが実行され、そのハッシュ値と結果セットが今後の使用のためにクエリキャッシュに保存されます。
クエリに関連するテーブルのデータが変更されると、ApsaraDB RDS for MySQL はそのテーブルに関連するすべてのキャッシュされた結果セットを無効化し、削除します。
制限事項
- クエリがヒットするには、完全に同一である必要があります。文字ケース、スペース、現在のデータベース、プロトコルバージョン、または文字セットに違いがある場合、異なるクエリとして扱われます。
- サブクエリの結果セットはキャッシュされません。外部クエリの最終的な結果セットのみがキャッシュされます。
- ストアドファンクション、ストアドプロシージャ、トリガー、またはイベント内のクエリはキャッシュされません。
- now()、curdate()、last_insert_id()、rand() などの非決定的関数を含むクエリは、実行ごとに結果が変わるため、キャッシュされません。
- mysql、information_schema、または performance_schema システムデータベース内のテーブルに対するクエリはキャッシュされません。
- 一時テーブルを使用するクエリはキャッシュされません。
- 警告を生成するクエリはキャッシュされません。
- SELECT ... LOCK IN SHARE MODE、SELECT ... FOR UPDATE、または SELECT * FROM ... WHERE autoincrement_col IS NULL を含むクエリはキャッシュされません。
- ユーザー定義変数を使用するクエリはキャッシュされません。
- SQL_NO_CACHE ヒントを含むクエリはキャッシュされません。
クエリキャッシュの設定
- パラメータ設定
コンソールで以下のパラメータを設定 します。
query_cache_limit(単位:バイト): クエリキャッシュに保存できる単一クエリの結果セットの最大サイズです。デフォルト値は 1 MB です。この上限を超える結果セットはキャッシュされません。query_cache_size(単位:バイト): クエリキャッシュの合計サイズです。デフォルト値は 3 MB です。query_cache_type: クエリキャッシュを有効にするかどうかを指定します。値が 0 の場合は、クエリキャッシュを無効にします。
値が 1 の場合は、
SELECT SQL_NO_CACHEで始まるクエリを除くすべてのクエリに対してクエリキャッシュを有効にします。値が 2 の場合は、
SELECT SQL_CACHEで始まるクエリに対してのみクエリキャッシュを有効にします。
重要query_cache_typeパラメータを変更すると、インスタンスが自動的に再起動されます。query_cache_size[the specified parameter is invalid] パラメータの値は 1024 の倍数である必要があります。そうでない場合、「」というメッセージが返されます。
- 有効
query_cache_sizeパラメータが 0 より大きく、query_cache_typeパラメータが 1 または 2 に設定されている場合、クエリキャッシュは有効になります。 - 無効
クエリキャッシュを無効にするには、
query_cache_sizeパラメータを 0 に設定するか、query_cache_typeパラメータを 0 に設定します。 - 推奨事項
query_cache_sizeパラメータを過度に大きな値に設定しないでください。大きなキャッシュは、他のインスタンスコンポーネント用のメモリリソースを消費するだけでなく、キャッシュ検索のオーバーヘッドも増加させます。インスタンス仕様に基づいて 10 MB から 100 MB の初期値を設定し、実行時の使用状況に応じて調整してください。query_cache_typeパラメータを変更するとインスタンスの再起動が必要になるため、クエリキャッシュの有効化または無効化はquery_cache_sizeパラメータの値を調整して行うことを推奨します。- クエリキャッシュは特定のユースケースにのみ適しています。有効にする前に十分なテストを実施し、パフォーマンスの低下やその他の問題を回避してください。
効果の検証
- コンソール

- SQL コマンド
次の SQL コマンドを実行して、クエリキャッシュのステータスを確認します。
show global status like 'Qca%';Qcache_hits: クエリキャッシュのヒット数。
Qcache_inserts: キャッシュに挿入されたクエリ数。
Qcache_not_cached: キャッシュ不可のクエリ数。
Qcache_queries_in_cache: 現在キャッシュされているクエリ数。
