シーケンス番号 | 考えられる原因 | 原因分析 | 切り分け方法 | 解決方法 |
1 | 短時間接続を頻繁に確立します。 | インスタンスの大量のリソースが頻繁な短時間接続の処理に消費され、CPU使用率と接続数が高くなりますが、QPS(クラスタの毎秒アクセス回数)は期待値に達していません。 | DBbrainの診断最適化機能を使用して、データベースインスタンスのリアルタイムセッション統計ビューとデータを分析し、接続数が急増しているかどうかを確認します。具体的な確認方法については、リアルタイムセッションを参照してください。 | |
2 | 高時間複雑度のコマンドが存在します。例えば、sort、sunion、zunionstoreなどです。 | Redisはシングルスレッドでコマンドを実行します。複雑度の高いコマンドを実行すると、他のコマンドをブロックする可能性が高くなります。コマンドの時間複雑度が高いほど、実行時により多くのリソースを消費し、CPU使用率の上昇を引き起こします。 | 複雑度の高いコマンドを実行すると、通常は時間がかかり、それに応じてスローログが生成されます。DBbrainの診断最適化機能を使用してスローログ分析を行い、スローログ情報リストで複雑度の高いコマンドが存在するかどうかを確認できます。具体的な操作については、スローログ分析を参照してください。 | 複雑度の高いコマンドを使用する場合は、毎回大量のデータを取得せず、できるだけ少量のデータを操作して、Redisがタイムリーに処理して返せるようにしてください。 |
3 | 読み書きの負荷が高すぎます。例えば、ホットKeyへの大量アクセスや大きなKeyが存在する場合です。 | ホットKeyとは、一定期間内にアクセス頻度が特に高いキー値を指します。具体的なビジネスシーンでは、ホットニュース、人気ライブ配信、タイムセールスイベントなどが含まれます。大量のアクセストラフィックが1つのインスタンスに集中し、単一インスタンスの処理上限に達すると、CPU使用率の上昇を引き起こします。 | ホットKey:複雑なデータ構造を分割し、ホットKeyを複数の新しいKeyに分割して異なるRedisノードに分散させることで、負荷を軽減します。ハッシュ型を例にすると、このホットKeyの型は2階層のデータ構造であり、このハッシュの要素数が多い可能性があるため、現在のhashを分割することを検討できます。 | |
4 | | 大Keyとは、特定のKeyに対応するvalueが非常に大きく、Redisの容量を大きく占有するものを指します。大Keyに関連する読み取りや削除操作を実行すると、帯域幅とCPUを著しく占有します。 | 大Key:valueが大きすぎる場合は、オブジェクトを複数のkey-valueに分割し、操作の負荷を複数のRedisインスタンスに分散できます。Keyが多すぎる場合は、hash構造による保存を参考にし、複数のKeyを1つのhash構造に保存できます。 | |
5 | | 読み取り負荷が高すぎて、リソースの上限に達しています。 | DBbrainの診断最適化機能を使用して、データベースインスタンスの性能傾向ビューを表示し、QPSや読み書きリクエストの指標を分析して、読み取り負荷または書き込み負荷の過大によってCPU使用率が高くなっていないかどうかを確認します。詳細については、性能傾向をご参照ください。 | 読み取り負荷が高い:レプリカ数を増やすことで読み取り負荷を分散します。レプリカの読み取り専用を有効にし、現在のインスタンスの読み取りリクエストをレプリカ読み取り専用ノードに移行することで、読み取り能力を柔軟に拡張し、読み書き性能を向上させます。具体的な操作については、レプリカ読み取り専用をご参照ください。 |
6 | | 書き込み負荷が過大で、メモリ容量が不足しています。 | | 書き込み負荷が大きすぎる:シャード数を増やすことで書き込み負荷を分散できます。インスタンスが標準アーキテクチャの場合は、標準アーキテクチャからクラスタアーキテクチャへのアップグレードを優先して行い、CPU処理能力を向上させてください。具体的な操作については、インスタンスアーキテクチャのアップグレードをご参照ください。クラスタアーキテクチャへアップグレードする前に互換性を確認する必要があります。詳細については、標準アーキテクチャからクラスタアーキテクチャへの移行チェックをご参照ください。 |
7 | 同一時点で大量のKeyが失効します。 |
Keyの有効期限が同じ時点に設定されていると、有効期限に達した時点で、RedisはKeyの削除スレッドを処理するために大きなCPUリソースを占有し、一時的なラグを引き起こします。
|
ビジネスロジック内で、有効期限を分散させ、Keyが集中して期限切れになることを回避してください。
| |
8 | DBを頻繁に切り替えます。つまり、selectコマンドを頻繁に実行してDBを切り替えます。 | DBを頻繁に切り替えると、リソースに過度なオーバーヘッドが生じます。 |
DBbrainの遅延分析機能を使用して、コマンド分析でselectコマンドの監視データを確認し、selectリクエストが多い現象が発生しているかどうかを確認します。具体的な確認方法については、コマンド分析をご参照ください。 | 異なる業務を保存する場合、DBを頻繁に切り替える業務については、分けて保存することをお勧めします。 同じ業務を保存する場合、Key名が競合しないことを前提として、データを同じDBに保存し、selectリクエストの操作回数を減らすことを検討します。 |
フィードバック