-
Slowlog개발하면서/코드보면서 2012. 10. 4. 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."
동영상이 있는데 참 재미있게 만들었습니다.
물론 속도가 빠르고, 다양한 기능이 있는것도 중요하지만, 관리하는것도 그만큼 중요하다는 것을 다시한번 느낍니다.
반응형