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

ApsaraDB RDS:ApsaraDB RDS for MySQLのクエリキャッシュ機能を設定および使用する方法を教えてください。

最終更新日:Nov 28, 2024

メリットとシナリオ

利点

  • CPU使用率が低下する。
  • IOPSの使用量は特定のケースで削減されます。
  • クエリの応答時間が短縮され、システムスループットが向上します。

シナリオ

  • テーブルデータは頻繁に更新されないか、静的です。
  • 同じSELECTステートメントが頻繁に実行されます。
  • クエリ結果セットが1 MB未満です。
説明 この機能は、常にクエリのパフォーマンスを向上させるとは限りません。 場合によっては、この機能はクエリのパフォーマンスを低下させることもあります。 たとえば、同じSELECTステートメントを頻繁に使用せずに大量のデータをクエリする場合、この機能はクエリのパフォーマンスを低下させる可能性があります。

実装

ApsaraDB RDS for MySQLは、クライアントから送信されたSELECTクエリのハッシュ値を計算します。 次に、ApsaraDB RDS for MySQLはハッシュ値を使用して、クエリキャッシュからクエリ結果を取得します。

ハッシュ値がキャッシュに格納されているクエリと一致する場合、結果はクライアントに直接返されます。 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がNULLである場合、クエリはキャッシュされません。
  • カスタム変数を参照する場合、クエリはキャッシュされません。
  • HINT - SQL_NO_CACHEを使用する場合、クエリはキャッシュされません。

設定

  • パラメーター設定

    このセクションでは、ApsaraDB RDSコンソールのパラメーター設定について説明します。

    • query_cache_limit: 単一クエリの最大キャッシュ結果セットを指定します。 デフォルト値は1 MBです。 指定された値を超える結果セットはキャッシュされません。 単位:バイト

    • query_cache_size (バイト): クエリキャッシュのサイズを指定します。 デフォルト値は3 MBです。 単位:バイト

    • query_cache_type: クエリキャッシュ機能を有効にするかどうかを指定します。 有効な値:

      0: 機能を無効にします。

      1: 機能を有効にします。 SELECT SQL_NO_CACHEで始まるクエリはキャッシュされません。

      2: 機能を無効にします。 SELECT SQL_CACHEで始まるクエリのみがキャッシュされます。

    重要
    • RDSインスタンスのquery_cache_typeパラメーターを変更すると、RDSインスタンスは自動的に再起動され、変更が有効になります。
    • query_cache_sizeパラメーターは、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_sizeパラメーターの値を変更して、クエリキャッシュ機能を有効または無効にすることができます。
    • クエリキャッシュ機能は、特定のシナリオに適用されます。 システムのパフォーマンスの低下やその他の問題を防ぐため、有効にする前にテストを実行する必要があります。

結果の確認

  • ApsaraDB RDSコンソール
  • SQL文

    次のステートメントを実行して、クエリキャッシュ機能の使用状況を照会できます。

    「Qca % 」のようなグローバルステータスを表示します。
    • Qcache_hits: クエリキャッシュヒットの数

    • Qcache_inserts: クエリキャッシュに追加されたクエリおよびクエリ結果の数

    • Qcache_not_cached: キャッシュできないクエリの数

    • Qcache_queries_in_cache: クエリキャッシュ内のクエリの数