このリファレンスを使用して、Redis のレイテンシーイベントの根本原因を特定し、適切な修正を適用します。
事前準備
特定のイベントを詳しく調べる前に、これらの一般的な原因を確認してください:
低速コマンド。すべてのキーをスキャンするコマンド (例:
KEYS) は、メインスレッドをブロックします。スロークエリログを確認して、これらのコマンドを見つけます。詳細については、「スロークエリログのクエリ」をご参照ください。ラージキー。ラージキーは、エビクションと有効期限切れを遅くします。オフラインキー分析を使用して、これらを特定します。詳細については、「オフラインキー分析機能の使用」をご参照ください。
高いメモリ使用量。使用済みメモリが
maxmemoryの上限を超えると、エビクションサイクルが頻繁に実行されます。詳細については、「インスタンスの構成の変更」をご参照ください。
背景情報
Redis 2.8.13 ではレイテンシーモニタリングが導入されました。これは、過去 160 秒間のデータを収集し、1 秒あたり最もレイテンシーの高いイベントのみを記録します。
Tair (Redis OSS-compatible) は、高度な代替機能であるレイテンシーインサイトを提供します。これは、すべてのコマンドの実行時間とともに最大 27 のイベントを記録し、過去 3 日間のレイテンシー統計を保持します。イベント名とそのレイテンシーしきい値については、「一般的な特別イベント」をご参照ください。
一般的なレイテンシーイベント
一部のイベントには親子関係があります:
AofWriteは親イベントです。データが追記専用ファイル (AOF) に書き込まれるたびに、Redis はAofWriteとともに、3 つの子イベント (AofWriteAlone、AofWriteActiveChild、またはAofWritePendingFsync) のうちの 1 つを正確に記録します。具体的な原因を見つけるには、子イベントを分析します。EvictionCycleはエビクションの親イベントです。EvictionDelとEvictionLazyFreeを一緒に分析して、エビクションレイテンシーの原因を特定します。
| イベント | 測定対象 | 一般的な原因 | 対処法 |
|---|---|---|---|
EvictionCycle | キーの選択、削除、バックグラウンドスレッドの待機を含む、完全なエビクションサイクルの時間 | 複数の要因 — EvictionDel と EvictionLazyFree を分析して原因を特定 | キーの使用状況を確認し、ビジネスデータを最適化します。エビクションが頻繁に発生する場合は、インスタンスをスケールアップして、メモリ使用量を maxmemory 未満に保ちます。 |
EvictionDel | エビクションサイクル中のキー削除時間 | ラージキーが削除されている | ラージキーを避けます。lazyfree-lazy-eviction を yes に設定して、非同期エビクションを有効にします。エビクションが頻繁に発生する場合は、インスタンスをスケールアップします。 |
EvictionLazyFree | バックグラウンドスレッドがメモリを解放するのを待機する時間 | バックグラウンドスレッドがメモリを解放している間 (例えば、ラージキーを削除している間)、削除可能なキーがない | maxmemory-policy パラメーターを使用してメモリ削除ポリシーを調整します。エビクションが頻繁に発生する場合は、インスタンスをスケールアップします。 |
ExpireCycle | キーの有効期限切れサイクルの時間 | ラージキーが削除されている | ラージキーを避けます。lazyfree-lazy-expire を yes に設定して、非同期の有効期限切れを有効にします。コンソールで定期的に期限切れデータをクリアします。 |
ExpireDel | キーの有効期限切れサイクル中のキー削除時間 | ラージキーが削除されている | ラージキーを避けます。 |
AofWrite | AOF にデータを書き込む合計時間 | 複数の要因 — AofWriteAlone、AofWriteActiveChild、AofWritePendingFsync を分析して原因を特定 | データ永続化が不要な場合は、appendonly を no に設定して AOF を無効にします。 |
AofWriteAlone | 同時実行中の子プロセスや保留中の fsync がない状態での AOF 書き込み時間 | 大量の書き込み量またはディスクパフォーマンスのボトルネック | AOF が不要な場合は、appendonly を no に設定します。 |
AofWriteActiveChild | 子プロセスもディスクに書き込んでいる間の AOF 書き込み時間 | 子プロセスのディスク I/O が AOF 書き込みと競合している | AOF が不要な場合は、appendonly を no に設定します。 |
AofWritePendingFsync | バックグラウンド fsync が進行中の AOF 書き込み時間 | バックグラウンド fsync が AOF 書き込みと競合している | AOF が不要な場合は、appendonly を no に設定します。 |
Commands | 通常のコマンド (高速とラベル付けされていない) の時間 | すべてのデータを走査するコマンド (例:KEYS | スロークエリログを確認して、長時間実行されるコマンドを見つけます。オフラインキー分析を使用して、ラージキーをチェックします。 |
FastCommand | O(1) または O(log N) の計算量を持つ高速コマンドの時間 | 大量のデータをコピーする高速コマンド (例:ラージキーに対する GET) | ラージキーを特定して分割します。詳細については、「ラージキーとホットキーの特定と処理」をご参照ください。 |
Fork | fork() を呼び出すタイミングfork() | AOF の再書き込み | データ永続化が不要な場合は、appendonly を no に設定して AOF を無効にします。 |