Tair (Redis OSS-compatible) における接続タイムアウトは、ほとんどの場合、実行に時間がかかるコマンド(スローコマンド)が原因です。スローログは、設定されたレイテンシーしきい値を超えるコマンドと、そのコマンドを送信したクライアントを特定できるため、パフォーマンス最適化の出発点として活用できます。
仕組み
スローログは、設定されたしきい値を超えて実行に要するコマンドを記録します。Tair では、2 種類のノードでスローログが生成され、それぞれ異なる方法でレイテンシーを計測します。
| ノードタイプ | 実行時間の計測対象 | タイムアウト問題のトラブルシューティングに推奨 |
|---|---|---|
| データノード | データノード上でのみコマンドを実行する時間。ネットワーク転送時間およびキュー待ち時間は含まれません。 | いいえ — 補足的な参照としてご活用ください |
| プロキシノード | プロキシがデータノードへリクエストを送信してから応答を受信するまでの時間。データノードの実行時間、ネットワーク転送時間、およびキュー待ちレイテンシーを含みます。 | はい — アプリケーションが実際に観測するレイテンシーに最も近似します |
スタンダードインスタンスにはプロキシノードのスローログはありません。スタンダードインスタンスをご利用の場合、ステップ 3 に直接進み、データノードのスローログを分析してください。
本トピックで説明する手法は、Redis Community Edition 2.8 インスタンスではサポートされていません。コンソールより「CloudDBA > スロークエリ」に移動し、当該インスタンスのスローログを表示してください。Redis Community Edition 2.8 インスタンスのスローログにはクライアントの IP アドレスは含まれません。
スローログの保持期間およびストレージ
データノードおよびプロキシノードのスローログは、いずれも 72 時間保持されます。保存されるエントリ数には制限はありません。
インスタンスのパフォーマンスが高いため、データノードでは通常、スロークエリログの生成件数は極めて少ないです。
パラメーター
データノードのパラメーター
| パラメーター | デフォルト値 | 単位 | 説明 |
|---|---|---|---|
slowlog-log-slower-than | 20000 | マイクロ秒 | このしきい値を超えるコマンドが記録されます。20,000 マイクロ秒は 20 ミリ秒に相当します。ただし、この値はネットワークおよびキュー待ち時間を除外したものですので、実際の観測レイテンシーは通常これよりも高くなります。 |
slowlog-max-len | 1024 | エントリ数 | 保存されるスローログエントリの最大数です。 |
プロキシノードのパラメーター
| パラメーター | デフォルト値 | 単位 | 説明 |
|---|---|---|---|
rt_threshold_ms | 500 | ミリ秒 | このしきい値を超えるコマンドが記録されます。クライアント側のタイムアウト期間(200–500 ms)に近い値を設定することを推奨します。 |
これらのパラメーターを調整するには、「インスタンスのパラメーターを設定する」をご参照ください。
スローログの照会
データノードのスローログ
以下のいずれかの方法をご利用ください。
Redis クライアントから
SLOWLOG GETコマンドを実行します。「SLOWLOG コマンド リファレンス」で構文をご確認ください。コンソールでログを表示するか、API を呼び出して取得します:スローログの照会 | DescribeSlowLogRecords
プロキシノードのスローログ
コンソールでログを表示するか、API を呼び出して取得します:スローログの照会 | DescribeSlowLogRecords
タイムアウト問題のトラブルシューティング
タイムアウトの原因となるコマンドを特定するには、以下の手順に従ってください。
プロキシノードのスローログを確認します。 コンソールで「スローログの照会」を開き、[プロキシ] タブを選択します。
プロキシノードのスローログが存在しない場合、問題はコマンド実行ではなく、クライアントとインスタンス間のネットワークにある可能性が高いです。
スタンダードインスタンスをご利用の場合、ステップ 3 に進んでください。
プロキシノードの最も古いスローログエントリを特定します。 最も古いエントリは、連鎖的に発生した遅延リクエストを引き起こしたコマンドを示します。そのエントリに記載されたクライアント IP アドレスにより、当該コマンドを送信したクライアントを特定できます。以下の例では、最も古いスローログエントリは
KEYSコマンドに関するものです。エントリ右側に記載された IP アドレスが、当該コマンドを送信したクライアントです。説明データノード上でスローコマンドが蓄積すると、それらのコマンドはプロキシノードのスローログにも記録されます。

データノードのスローログで当該コマンドを検証します。 [データノード] タブに切り替え、同一のコマンドが記録されているか確認します。プロキシノードのスローログで最初に出現するコマンドは、通常、データノードのスローログにも記録されます。ただし、両ノードの計測定義およびしきい値が異なるため、データノードのスローログに記録されるエントリ数は、プロキシノードのものより少なくなります。以下の例では、プロキシノードのスローログに記録された
KEYSコマンドが、データノードのスローログにも記録されています。他のプロキシノードのエントリは、データノードのエントリと一致しません。これにより、KEYSコマンドがタイムアウトの原因であることが確認されます。
プロキシノードのスローログでクライアント IP アドレスを検索します。 ステップ 2 で特定したコマンドをフィルター条件として使用し、当該コマンドを送信しているすべてのクライアントを特定します。当該クライアントを管理するチームに連絡し、コマンドの使用方法を最適化してください。
次のステップ
インスタンスパラメーターの設定 — スローログのしきい値を調整する
スローログの照会 — コンソールでスローログを表示
DescribeSlowLogRecords — API を使用してスローログを取得