Tair または Redis インスタンスで CPU 使用率の高騰やメモリ圧迫が発生した場合、その原因は大規模キー(large key)およびホットキー(hot key)であることが多くあります。大規模キーは過剰なメモリを消費し、ホットキーはトラフィックを集中させることで、インスタンスの CPU 使用率またはネットワーク帯域幅を限界まで押し上げ、パフォーマンス低下やサービス停止を引き起こす可能性があります。「上位キー統計情報」機能では、要素数またはメモリ使用量が最も大きいキー、および QPS またはトラフィックが最も高いキーに関するリアルタイムおよび過去の統計情報を提供します。これにより、パフォーマンスの問題の根本原因を迅速に特定・対応できます。
この機能は、クライアントによって実際に読み書きされたキーのみを追跡します。すべてのキーをリアルタイムでスキャンするものではありません。最近アクセスされていないキーは結果に表示されない場合があります。また、インスタンスの再起動または高可用性(HA)フェールオーバーが発生した場合、収集済みの統計情報はクリアされ、収集はゼロから再開されます。アクセス履歴に関係なく、すべてのキーにおけるメモリ使用量を包括的に分析するには、「オフラインキー分析」をご利用ください。
仕組み
「上位キー統計情報」では、以下の 4 カテゴリのキーを収集します。
| カテゴリ | 対応バージョン | しきい値 | 表示内容 |
|---|---|---|---|
| 大規模キー(要素数ベース) | Redis Community Edition 5.0 以降、Tair(Enterprise Edition) | ハッシュ内のフィールド数やセット内のメンバー数など、キーの要素数がしきい値に達または超えると、大規模キーとしてカウントされます。デフォルト値:2,000 要素。パラメーター bigkey-threshold で調整可能です。パラメーター設定に bigkey-threshold が存在しない場合は、まずマイナーバージョンを更新してください。 | データ型ごとに上位 3 件の大規模キー。同点の場合は書き込み時刻が早い順(古い方)に並びます。インスタンス全体で表示される大規模キーが合計 3 件のみの場合、マイナーバージョンを更新して再実行してください。 |
| 大規模キー(メモリ使用量ベース) | クラウドネイティブ・メモリ最適化 Tair(Enterprise Edition)インスタンス、マイナーバージョン 25.6.0.0 以降 | キーの総メモリ使用量がしきい値(デフォルト:500 MB。パラメーター bigkey-mem-threshold で調整可能)を超えるか、単一要素のメモリ使用量が 50 MB を超える場合、大規模キーとしてカウントされます。 | 上位 3 件の大規模キー。同点の場合は辞書式順序でソートされます。 |
| ホットキー(QPS ベース) | Redis Community Edition 5.0 以降、Tair(Enterprise Edition) | キーの秒間クエリ数(QPS)がしきい値を超えると、ホットキーとしてカウントされます。デフォルト値:5,000 QPS。パラメーター hotkey-threshold で調整可能です。 | 任意の時点で上位 50 件のホットキーを、正確なリアルタイム QPS とともに表示します。旧マイナーバージョン(Redis Community Edition 7.0.18、6.0.2.9、5.5.2.9 未満、またはメモリ最適化 Tair 5.0.50、25.2.0.0 未満)では、しきい値が固定の 3,000 QPS であり変更不可、QPS は概算範囲でのみ表示、かつ Redis Community Edition の統計は上位 20 件のホットキーに制限されていました。最新のマイナーバージョンへアップグレードすることで、ホットキーの完全な可視化が可能になります。 |
| ホットキー(トラフィックベース) | クラウドネイティブ・メモリ最適化 Tair(Enterprise Edition)インスタンス、マイナーバージョン 25.2.0.0 以降 | キーのアクセス トラフィックが 1 MB/s を超えると、そのキーはホットキーとしてカウントされます。このカテゴリはデフォルトで無効です。「設定」を使用して、#no_loose_high-cost-key-enabled パラメーターを yes に設定することで有効化できます。#no_loose_high-cost-key-traffic-bytes-threshold を使用して、トラフィックのしきい値(単位:B/s)を調整します。個別のアクセス トラフィックが低いキーでも、高トラフィックのハッシュタグまたはプレフィックス グループに属するキーを追跡するには、「設定」を使用して #no_loose_high-cost-key-parse-hashtag を設定します。— マイナーバージョン 25.9.1.0 以降が必要です。 | 任意の時点で上位 50 件のホットキーを、正確なインバウンドおよびアウトバウンドトラフィック、およびアクセス頻度とともに表示します。統計にはデータベースに存在しないキーも含まれる場合があり、その際のデータの型は not-exist-key として表示されます。 |
上位キー統計情報の表示
コンソールにログインし、「インスタンス」ページに移動します。上部のナビゲーションバーから、ご利用のインスタンスが配置されているリージョンを選択します。該当インスタンスを見つけ、その ID をクリックします。
左側のナビゲーションウィンドウで、CloudDBA > 上位キー統計情報 を選択します。
リアルタイム または 既存データ を選択し、表示するデータの種類を指定します。図 1.キー分析

クラスタアーキテクチャまたは読み書き分離アーキテクチャを使用しているインスタンスの場合、現在のノード ドロップダウンリストからノードを選択して、ノード単位のデータを表示できます。
既存データは過去 4 日分をカバーします。1 回のクエリで取得可能な期間は最大 3 時間です。
API リファレンス
プログラムによる上位キー統計情報の取得には、DAS の API オペレーションをご利用ください。
| API オペレーション | 説明 |
|---|---|
| DescribeHotBigKeys | 現在メモリ上にあるホットキーおよび大規模キーに関するリアルタイム情報を取得します。 |
| DescribeTopHotKeys | 指定期間における上位 20 件のホットキーに関する情報を取得します。 |
| DescribeTopBigKeys | 指定期間における上位 20 件の大規模キーに関する情報を取得します。 |
| DescribeHotKeys | Redis インスタンスのホットキーに関する情報を取得します。 |
よくある質問
なぜ String 型のキーが「大規模キー(要素数ベース)」に表示されるのですか?
Redis Community Edition および一部の旧バージョンの Tair では、String キーの長さが bigkey-threshold 値(デフォルト:2,000)を超える場合、大規模キーとして含められます。
要素数が 10 未満のキーが大規模キーとして表示されるのはなぜですか?
最も考えられる原因は、キー名自体が非常に長いことです。memory usage key_name コマンドを実行して、実際のメモリ使用量を確認してください。結果が予想外に大きい場合は、キー名の変更または構造の見直しをご検討ください。
もう一つの原因として、マイナーバージョンが古くなっている可能性があります。マイナーバージョンが 5.2.7 より前のインスタンスでは、bigkey-threshold のデフォルト値が 0 となっており、メモリ使用量が小さいキーでも大規模キーとして表示されることがあります。マイナーバージョンをアップグレードすることで解消できます。
次のステップ
使用ケースが、Zset データ構造を使用して 100,000 要素を超えるランキングリストを含む場合、Tair の exZset データ構造をご利用ください。TairJedis クライアントを使用すると、単一のキーの下で分散アーキテクチャによるランキングリストを実装できます — Tair は自動的にデータと計算をサブキー間で分散し、過大なキーおよびホットキーの発生を防止します。
CPU 使用率の高騰に関するトラブルシューティングについては、「インスタンスの CPU 使用率高騰のトラブルシューティング」をご参照ください。
メモリ使用量の高騰に関するトラブルシューティングについては、「インスタンスのメモリ使用量高騰のトラブルシューティング」をご参照ください。