すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ApsaraDB RDS for MySQL のクエリキャッシュ

最終更新日:Jun 22, 2026

メリットと使用上の注意

メリット:

  • 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: 現在キャッシュされているクエリ数。