Redisロギングスロークエリログ機能


一、slow logとは何か
Slow logは、Redisがクエリ実行時間を記録するためのログシステムである.クエリー実行時間とは、クライアント応答(talking)、返信送信などのIO操作を含まず、クエリーコマンドを1つ実行するのに要する時間を指す.また、slow logはメモリに保存されており、読み書き速度が非常に速いため、slow logをオンにすることでRedisの速度を損なう心配はありません.
二、slowlog Slow logを設定動作は2つの構成パラメータ(configuration parameter)によって指定され、redisを書き換えることができる.confファイルまたはconfig getコマンドとconfig getコマンドで動的に変更します.1、最初の選択肢はslowlog-log-slower-than
≪アクション|Actions|emdw≫:実行時間がマイクロ秒(microsecond,1秒=1000000マイクロ秒)より大きいクエリーを記録するかどうかを決定します.たとえば、次のコマンドを実行すると、すべてのクエリー時間が100マイクロ秒以上のクエリーがslow logに記録されます.CONFIG SET slow-log-slower-than 100です.次のコマンドは、すべてのクエリー時間が1000マイクロ秒以上のクエリーを記録します.CONFIG SET slow-log-slower-than 1000
2、もう一つの選択肢はslowlog-max-len
役割:slow logが最大でどれだけのログを保存できるかを決定します.slow log自体はFIFOキューで、キューサイズがslowlog-max-lenを超えると、最も古いログが削除され、最新のログがslow logに追加されます.すなわち、サーバslowlog-max-lenの値が100であり、サーバが100個の遅いクエリー・ログを格納していると仮定すると、サーバが新しいログを追加する場合は、現在保存されている最も古いログを削除してから、新しいログを追加する必要があります.
3、config get/setコマンドを使用して、2つのオプションの現在値をクエリー/設定する
redis> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "1000"
redis> config set slowlog-log-slower-than 0
OK

redis> config get slowlog-max-len
1) "slowlog-max-len"
2) "128" 
redis> config set slowlog-max-len 5
OK

三、slow logを表示slow logを表示するには、slowlog getまたはslowlog get numberコマンドを使用します.前者はすべてのslow logを印刷します.最大長はslowlog-max-lenオプションの値に依存しますが、slowlog get numberは指定された数のログのみを印刷します.
#            :
redis> SET msg "hello world"
OK
redis> SET number 10086
OK
redis> SET database "Redis"
OK

#   SLOWLOG GET                 :
redis> SLOWLOG GET
1) 1) (integer) 4               #    (unique)      
   2) (integer) 1378781447      #            ,  UNIX        
   3) (integer) 13              #       ,      
   4) 1) "SET"                  #         
      2) "database"
      3) "Redis"
2) 1) (integer) 3
   2) (integer) 1378781439
   3) (integer) 10
   4) 1) "SET"
      2) "number"
      3) "10086"
3) 1) (integer) 2
   2) (integer) 1378781436
   3) (integer) 18
   4) 1) "SET"
      2) "msg"
      3) "hello world"
4) 1) (integer) 1
   2) (integer) 1378781425
   3) (integer) 11
   4) 1) "CONFIG"
   2) "SET"
   3) "slowlog-max-len"
   4) "5"
5) 1) (integer) 0
   2) (integer) 1378781415
   3) (integer) 53
   4) 1) "CONFIG"
      2) "SET"
      3) "slowlog-log-slower-than"
      4) "0"

コメント:
ログの唯一のidは、Redisサーバが再起動するたびにリセットされます.これにより、ログの重複処理を回避できます(たとえば、新しい遅いクエリーが発見されるたびにメールで通知したい場合があります).この時点でSLOWLOG GETコマンドをもう1つ実行すると、前回実行したSLOWLOG GETコマンドはスロークエリーログに記録されていますが、最も古い0番のスロークエリーログは削除され、サーバのスロークエリーログの数は5つになります.
redis> SLOWLOG GET
1) 1) (integer) 5
   2) (integer) 1378781521
   3) (integer) 61
   4) 1) "SLOWLOG"
      2) "GET"
2) 1) (integer) 4
   2) (integer) 1378781447
   3) (integer) 13
   4) 1) "SET"
      2) "database"
      3) "Redis"
3) 1) (integer) 3
   2) (integer) 1378781439
   3) (integer) 10
   4) 1) "SET"
      2) "number"
      3) "10086"
4) 1) (integer) 2
   2) (integer) 1378781436
   3) (integer) 18
   4) 1) "SET"
      2) "msg"
      3) "hello world"
5) 1) (integer) 1
   2) (integer) 1378781425
   3) (integer) 11
   4) 1) "CONFIG"
   2) "SET"
   3) "slowlog-max-len"
   4) "5"

四、現在のログの数を表示コマンドslowlog lenを使用して現在のログの数を表示します.この値とslower-max-lenの違いに注意してください.1つは現在のログの数であり、1つは記録が許可されている最大ログの数です.
redis> slowlog len
(integer) 5

五、クリアログコマンドslowlog RESETを使用してslow logをクリアすることができる.
redis> slowlog len
(integer) 14 
redis> slowlog reset
OK 
redis> slowlog len
(integer) 0