遅いリクエストが原因で発生する接続タイムアウトは、Tair (Redis OSS-compatible) のサービス品質に影響を与える可能性がある一般的な問題です。Tair (Redis OSS-compatible) のスロークエリログシステムは、遅いリクエストの場所と、それを送信したクライアント IP アドレスを迅速に特定するのに役立ちます。この情報は、タイムアウトの問題を解決するための確かな根拠となります。
表示方法
タイプ | 方法 |
データノードのスロークエリログ |
|
プロキシノードのスロークエリログ | コンソールを使用するか、API オペレーションを呼び出します。 |
操作手順
サービスのタイムアウトには複雑な原因が考えられますが、多くの場合、遅いリクエストに関連しています。以下の手順に従って、タイムアウトの問題をトラブルシューティングします。
サービスのタイムアウトが発生した場合は、まずプロキシノードのスロークエリログを確認します。詳細については、「スロークエリログのクエリ」をご参照ください。
説明インスタンスが標準アーキテクチャを使用している場合は、ステップ 3 に進み、データノードのスロークエリログを分析します。
プロキシノードのスロークエリログが空の場合は、クライアントとインスタンス間のネットワーク接続を確認してください。
プロキシノードのスロークエリログで、最も古いエントリからコマンドを特定します。
説明通常、プロキシノードのスロークエリログは、データノードでの遅いリクエストが原因でコマンドが滞留した場合に生成されます。
この例では、最も古いスロークエリログのレコードは KEYS コマンドによって生成されています。ログレコード内の IP アドレスは、コマンドを送信したクライアント IP アドレスです。
[Slow query logs] ページで、[Proxy Node] タブをクリックしてプロキシノードのスロークエリログを表示します。この例では、テーブルに 5 つのレコードが表示されています。1 つは
KEYSコマンド、4 つはSETコマンドのもので、実行時間は 64,048 マイクロ秒から 88,861 マイクロ秒の範囲です。データノードのスロークエリログを確認し、プロキシログで見つかったコマンドが同様に存在するかを調べ、それが根本原因であることを確認します。
説明通常、プロキシノードで最初にスロークエリログのレコードを生成したコマンドは、データノードでもレコードを生成します。2 つのログでは実行時間の定義が異なり、使用するスロークエリのしきい値も異なるため、データノードのスロークエリログのレコード数は、通常プロキシノードのスロークエリログよりも少なくなります。
この例では、2 つのログを比較すると、KEYS コマンドのレコードが両方に存在することがわかります。データノードのログにプロキシログの他のコマンドが存在しないことから、KEYS コマンドが根本原因であることが確認されます。
[Slow query logs] ページで、[Data Node] タブをクリックしてデータノードのスロークエリログを表示します。この例では、
KEYSコマンドのスロークエリログレコードのみが表示されています。その実行時間が長いことから、このコマンドがタイムアウトの根本原因であることが確認されます。プロキシノードのスロークエリログで前の手順で特定したコマンドを検索し、送信元のクライアント IP アドレスを見つけます。その後、クライアントアプリケーションを最適化します。