ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Slowlog
    개발하면서/코드보면서 2012.10.04 00:02

    Slowlog는 지정한 시간이 넘어서는 command를 기록해서 나중에 관리차원에서 볼수있게 해줍니다.


    설정으로 slowlog-log-slower-than, slowlog-max-len을 설정합니다.

    slowlog-log-slower-than는 microseconds단위로써,
    지정한 시간보다 느린 command를 기록합니다. threshold같은거죠.음수로 지정하면 slowlog를 사용하지 않고,
    0으로 하면 모든 command를 기록합니다.

    slowlog는 list 자료구조에 저장하는데, 이 List의 최대 크기를 지정하는 설정이 slowlog-max-len 입니다.
    (검색하면서 알았는데, MySQL Slow Query log 란게 있었네요.

    이젠 소스 분석하는만큼 직접 만들어보는것도 시간을 쏟아야겠어요 /엉엉/)



    slowlog.c는 slowlogEntry를 만드는 slowlogCreateEntry, 해제하는 slowlogFreeentry,

    server start할때 server.slowlog 초기화해주는 slowlogInit,

    그리고 실제 slowlog-log-slower-than 이상 걸리는 명령어에 대해 로그를 저장하는 slowlogPushEntryIfNeeded

    "slowlog reset" 를 담당하는 slowlogReset, 마지막으로 저장되어있는 slowlog의 정보를 볼수 있는

    slowlogCommand 함수가 있습니다.


    알아볼건, slowlogPushEntryIfNeeded입니다. 그리고 마지막으로 실제 해보고 slowlog를 마치겠스니다.

    slowlogCommand도 후보였는데, 'slowlogEntry, length를 보고, slowlog를 reset하는 기능이다' 이게 끝이라;;;


    slowlogPushIfNeeded 함수는 먼저 server.slowlog_log_slower_than이 음수면 return입니다.

    그리고 command의 duration이 설정한 값보다 크면 그때 slowlogEntry를 만들어서

    server.slowlog에 add해줍니다. 

    argc, argv가 있는데 어간 redisClient 명령어 argument입니다. 또 인자의 갯수가 너무 많을수도 있는걸

    고려해서 최대 32개의 인자만 저장하도록 되어있습니다.


    마지막으로 server.slowlog-max-len이 server.slowlog의 max_length먄큼의 크기를 유지하는 작업을 합니다.



    각 명령어마다 총 4개의 설명이 나옵니다.

    1)은 server.slowlog_entry_id로서 slowlog_entry별 고유값입니다.

    2)는 명령어가 실행한 unix timestamp

    3)은 명령어가 실행하는데 걸린 시간, 단위는 microseconds입니다.

    4)는 실제 명령어가 저장됩니다.



    http://garantiadata.com/blog/enhancing-redis-slow-log#.URRHvdFx50w

    그리고 오른쪽 "Don't let Redis scalability limitations turn into business limitations." 

    동영상이 있는데 참 재미있게 만들었습니다.

    물론 속도가 빠르고, 다양한 기능이 있는것도 중요하지만, 관리하는것도 그만큼 중요하다는 것을 다시한번 느낍니다.

    TAG

    댓글 0

Designed by Tistory.