Redisスロークエリ解析(8)
2792 ワード
遅いクエリー・ログは、コマンドの実行前後に各コマンドの実行時間を計算するシステムです.予め設定されたバルブ値を超えると記録されます.
Redis実行コマンドは次のとおりです.送信コマンド コマンドキュー コマンド実行 は結果 を返す.
スロー・クエリはステップ3の時間のみを統計するので、スロー・クエリがないとクライアントにタイムアウトの問題がないわけではありません.
スロークエリの2つの構成パラメータ
プロファイル の変更 config setコマンドを使用して を動的に変更
config set slowlog-log-slower-than 20000
config set slowlog-max-len 1000
config rewrite//上記の2つのコマンドをローカルプロファイルに永続化する必要がある場合は、このコマンドを実行する必要があります:config rewrite
slowlog get [n]
nバーの数を指定できます.nを指定しないと、すべての遅いクエリーが取得されます.
各スロークエリーは4つのプロパティで構成されていますスロークエリの識別ID タイムスタンプ が発生する.コマンド消費時間 が実行するコマンドおよびパラメータ
slowlog len
slowlog reset
スロー・クエリーは、redisのボトルネックを見つけるのに効果的です.実際に使用しています.
1、slowlog-max-len配置提案:オンライン上でスロークエリーリストを大きくすることを提案し、スロークエリーredisを記録すると長命令を遮断するので、大量のメモリを消費することはなく、リストの長さを大きくすると、スロークエリーがキューに詰まって除去される可能性のある行を小さくすることができ、オンライン上で1000以上設定する
2、slowlog-log-slower-than配置提案:デフォルト値が10ミリ秒を超えて遅いクエリーと判断し、redisの同時量に基づいてこの値を調整する必要がある.redisは単一スレッド応答コマンドを採用しているため、高流量シーンに対して、コマンド実行時間が1ミリ秒以上であれば、RedisはOPS(operations運営操作)を最大1000未満にサポートできる.したがって、高opsシーンのredisは1ミリ秒に設定することを推奨します.
3、スロークエリはコマンド実行時間のみを記録し、コマンドキューとネットワーク転送時間を含まない.
4、スロー・クエリー・ログは先進的な先頭キューであるため、スロー・クエリーが比較的多い場合、最も古いスロー・クエリー・コマンドが失われることがあります.これを防止するために、slowlog getコマンドを定期的に実行してスロー・クエリーを他のストレージ(mysqlなど)に永続化し、可視化インタフェースを作成してクエリーを行うことができます.(後のブログではcachecloudが提供するこのような機能を紹介しますので、そのまま使えます)
Redis実行コマンドは次のとおりです.
スロー・クエリはステップ3の時間のみを統計するので、スロー・クエリがないとクライアントにタイムアウトの問題がないわけではありません.
スロークエリの2つの構成パラメータ
slowlog-log-slower-than:プリセットバルブ値、その単位はマイクロ秒(1秒=1000ミリ秒、1ミリ秒=1000マイクロ秒)、デフォルト値は10000で、「keys*」などの「遅い」コマンドが実行された場合.10000マイクロ秒を超えると、遅いクエリー・ログに記録されます.
注意:slowlog-log-slower-than=0の場合、すべてのコマンドが記録されます.
slowlog-log-slower-than<0の場合、コマンドは記録されません.
slowlog-max-len:スロークエリログに最も格納されるエントリ数.Redisは、スロークエリーログを格納するためにリストを使用します.slowlog-max-lenはリストの最大長です.リストが最大長になったときに、スロークエリーログを追加し続けると、最初に挿入したコマンドがリストから削除されます.
スロークエリ構成パラメータの2つの方法:
config set slowlog-log-slower-than 20000
config set slowlog-max-len 1000
config rewrite//上記の2つのコマンドをローカルプロファイルに永続化する必要がある場合は、このコマンドを実行する必要があります:config rewrite
127.0.0.1:6379> config set slowlog-log-slower-than 0
OK
127.0.0.1:6379>
スロークエリー操作
1、遅いクエリーログを取得する
slowlog get [n]
nバーの数を指定できます.nを指定しないと、すべての遅いクエリーが取得されます.
127.0.0.1:6379> slowlog get
1) 1) (integer) 1
2) (integer) 1535422960
3) (integer) 37
4) 1) "keys"
2) "*"
5) "127.0.0.1:51326"
6) ""
2) 1) (integer) 0
2) (integer) 1535422957
3) (integer) 430
4) 1) "config"
2) "set"
3) "slowlog-log-slower-than"
4) "0"
5) "127.0.0.1:51326"
6) ""
127.0.0.1:6379>
各スロークエリーは4つのプロパティで構成されています
2、スロークエリーログリストの現在の長さを取得する
slowlog len
127.0.0.1:6379> slowlog len
(integer) 3
127.0.0.1:6379>
3、スロークエリーログリセット(クリアリスト)
slowlog reset
127.0.0.1:6379> slowlog reset
OK
スロークエリ生産構成
スロー・クエリーは、redisのボトルネックを見つけるのに効果的です.実際に使用しています.
1、slowlog-max-len配置提案:オンライン上でスロークエリーリストを大きくすることを提案し、スロークエリーredisを記録すると長命令を遮断するので、大量のメモリを消費することはなく、リストの長さを大きくすると、スロークエリーがキューに詰まって除去される可能性のある行を小さくすることができ、オンライン上で1000以上設定する
2、slowlog-log-slower-than配置提案:デフォルト値が10ミリ秒を超えて遅いクエリーと判断し、redisの同時量に基づいてこの値を調整する必要がある.redisは単一スレッド応答コマンドを採用しているため、高流量シーンに対して、コマンド実行時間が1ミリ秒以上であれば、RedisはOPS(operations運営操作)を最大1000未満にサポートできる.したがって、高opsシーンのredisは1ミリ秒に設定することを推奨します.
3、スロークエリはコマンド実行時間のみを記録し、コマンドキューとネットワーク転送時間を含まない.
4、スロー・クエリー・ログは先進的な先頭キューであるため、スロー・クエリーが比較的多い場合、最も古いスロー・クエリー・コマンドが失われることがあります.これを防止するために、slowlog getコマンドを定期的に実行してスロー・クエリーを他のストレージ(mysqlなど)に永続化し、可視化インタフェースを作成してクエリーを行うことができます.(後のブログではcachecloudが提供するこのような機能を紹介しますので、そのまま使えます)