달력

112017  이전 다음

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  

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." 

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

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

저작자 표시 비영리
신고
Posted by 오산돌구
TAG