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

ApsaraDB for Redis:プロキシクエリキャッシュを使用してホットキーによって引き起こされる問題に対処する

最終更新日:Sep 12, 2024

このトピックでは、プロキシクエリキャッシュ機能の使用方法について説明します。 Tair(Redis OSS-compatible)はプロキシクエリキャッシュ機能を提供し、大量の読み取りリクエストを受信するホットキーによって引き起こされるアクセススキューの問題に対処します。 この機能を有効にすると、プロキシノードはホットキーのリクエストとレスポンスデータをキャッシュします。 プロキシノードがキャッシュされたデータの有効期間内に重複要求を受信すると、プロキシノードは、バックエンドデータシャードと対話する必要なしに、要求の応答をクライアントに直接返す。

前提条件

  • 管理するインスタンスは、ApsaraDB for Redis Enhanced Edition (Tair) DRAMベースまたは永続メモリ最適化インスタンスです。

  • インスタンスは、読み取り /書き込み分割アーキテクチャまたはプロキシモードのクラスターアーキテクチャを使用します。

シナリオ

プロキシクエリキャッシュ機能は、ホットキーによって引き起こされるスキューされた要求に対処または防止するために使用できます。 ホットキーは、多数の読み取り要求を受信するキーであり、一部のデータシャードのCPU使用率とトラフィック使用率を高レベル、さらには100% に維持します。

説明

プロキシノードにキャッシュされたホットキーのクエリ結果は、キャッシュされたデータの有効期間内に更新されません。 したがって、ビジネスがサポートしていることを確認してください 最終的な一貫性

制御ポリシー機能の動作

図 1. プロキシクエリキャッシュ機能の仕組み Proxy Query Cache原理

Tair(Redis OSS-compatible)は、効果的なソートと統計アルゴリズムを使用してホットキーを識別します。ホットキーは、1秒あたり5,000クエリ (QPS) を超えるキーです。 プロキシクエリキャッシュ機能を有効にすると、プロキシノードは設定したルールに基づいてホットキーのリクエストとレスポンスデータをキャッシュします。 プロキシノードは、キー全体ではなく、ホットキーの要求および応答データのみをキャッシュします。 プロキシノードがキャッシュされたデータの有効期間内に重複要求を受信した場合、プロキシノードは、バックエンドデータシャードと対話する必要なしに、要求の応答をクライアントに直接返す。 これにより、読み取り速度が向上し、ホットキーがデータシャードのパフォーマンスに与える影響が軽減され、リクエストの偏りが防止されます。

説明

インスタンス診断機能を使用して、インスタンスがスキューリクエストを受信したかどうかを分析できます。 リアルタイムキー統計機能を使用して、インスタンス内のホットキーに関する統計を照会することもできます。 詳細については、「診断レポートの作成」および「リアルタイムキー統計機能の使用」をご参照ください。

パラメーター設定

この機能を管理するには、次の表に示すインスタンスパラメーターを変更します。 詳細は、「インスタンスパラメーターの設定」をご参照ください。

パラメーター

説明

query_cache_enabled

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

  • 0 (デフォルト): プロキシクエリキャッシュ機能を無効にします。

  • 1: プロキシクエリキャッシュ機能を有効にします。

重要

プロキシノードにキャッシュされたホットキーのクエリ結果は、キャッシュされたデータの有効期間内に更新されません。 したがって、ビジネスがサポートしていることを確認してください 最終的な一貫性

query_cache_mode

プロキシクエリのキャッシュモード。 有効な値:

  • 0: データシャードによってプッシュされたホットキーのクエリ結果のみをキャッシュします。

  • 1: すべてのキーのクエリ結果をキャッシュします。 キャッシュされたデータは、LRU (Least Recently Used) アルゴリズムに基づいて削除されます。

重要

プロキシノードの場合、スレッドあたりの最大キャッシュ容量は100 MBです。 このパラメーターが1に設定されている場合、プロキシノードはLRUアルゴリズムに基づいてデータを削除します。 この場合、キャッシュヒット率が低下し、全体的な性能が損なわれる可能性がある。

query_cache_expire

キャッシュされたデータの有効期間。 単位:ミリ秒。 有効な値: 10060000。 デフォルト値: 1000

  • キャッシュされたデータが有効期間内に変更された場合、変更されたデータはキャッシュに同期されません。 この場合、キャッシュが期限切れになるまで、同じ読み取り要求に対してダーティデータが返されます。

  • このパラメーターの値は、ビジネス要件とダーティデータに対する許容度に基づいて評価する必要があります。 値が必要な値よりも小さい場合、キャッシュヒット率は低下します。 値が必要以上に大きい場合、クライアントはダーティデータを長時間読み取ります。

コマンド

Tair(Redis OSS-compatible) インスタンスに接続し、次のコマンドを実行してクエリキャッシュの使用状況を確認できます。 詳細については、「redis-cliを使用してApsaraDB For Redisインスタンスに接続する」「」をご参照ください。

QUERYCACHEキー

コマンド構文: QUERYCACHE KEYS

コマンドの説明: このコマンドは、プロキシノードにキャッシュされたすべてのホットキーを照会するために使用されます。 関連付けられたデータベースの名前やホットキー自体の名前など、各ホットキーに関する情報を返します。

サンプルコマンド:

QUERYCACHE KEYS

サンプル出力:

1) 1) (integer) 0
   2) "key:000000000003"
2) 1) (integer) 0
   2) "key:000000000001"
3) 1) (integer) 0
   2) "key:000000000002"
4) 1) (integer) 0
   2) "key:000000000000"

QUERYCACHE INFO

コマンド構文: QUERYCACHE INFO

コマンドの説明: このコマンドは、プロキシクエリキャッシュの動作状態を照会するために使用される。

サンプルコマンド:

QUERYCACHE INFO

サンプル出力:

1) "put_qps:4.00"
2) "get_qps:16570.00"
3) "hit_rate:99.98"
4) "memory_size:180"
5) "query_count:4"
6) "bandwidth_limit_query_cnt:0"
7) "qps_limit_query_cnt:0"

サンプル出力の説明:

  • put_qps: データノードが1秒あたりにキャッシュに書き込む回数。

  • get_qps: クライアントが1秒あたりにキャッシュから読み取った回数。

  • hit_rate: キャッシュヒット率。

  • memory_size: キャッシュされたデータによって消費されるメモリ。 単位:バイト

  • query_count: キャッシュされたリクエストの数。

  • bandwidth_limit_query_cnt: 帯域幅制限によりクエリキャッシュへのアクセスが制限された回数。 デフォルトでは、スロットリングは無効になっています。

  • qps_limit_query_cnt: QPS制限によりクエリキャッシュへのアクセスが制限された回数。 デフォルトでは、スロットリングは無効になっています。

QUERYCACHE INSTALL

コマンド構文: QUERYCACHE INSTALL

コマンドの説明: このコマンドは、キャッシュされたすべてのリクエストを照会します。

サンプルコマンド:

QUERYCACHE INSTALL

サンプル出力:

1) 1) (integer) 0
   2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000000\r\n"
   3) (integer) 668
2) 1) (integer) 0
   2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000001\r\n"
   3) (integer) 668
3) 1) (integer) 0
   2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000003\r\n"
   3) (integer) 668
4) 1) (integer) 0
   2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000002\r\n"
   3) (integer) 667

サンプル出力の説明: 各リクエストは、データベース名、Redisシリアル化プロトコル仕様に基づいてフォーマットされた完全なリクエストコンテンツ、およびミリ秒単位の残り時間の3行の情報で構成されます。