Redis SLOWLOG subcommand

Redis Server 教育
Redis Server Course
Redis 定期点検/技術支援
Redis Technical Support
Redis エンタープライズサーバ
Redis Enterprise Server

Redis SLOWLOG

Slowlog는 모든 명령의 수행시간이 설정 시간 이상이면 기록을 남깁니다.   Latency Monitor와 함께 서버 성능을 분석 또는 문제(trouble) 발생시 추적할 수 있는 유용한 도구입니다.
수행시간은 서버에서 처리하는 시간만 포함합니다.   명령이 클라이언트에서 서버로 도착하는 시간, 결과를 클라이언트에 보내는 시간은 포함하지 않습니다.   Slowlog 기록으로 인한 성능 저하를 최소화하기 위해서 파일에 기록하지 않고 메모리에만 합니다.

이 문서는 버전 4.0.4를 기준으로 만들었습니다.

활성화 방법

활성화하는 데는 redis.conf에 있는 두 가지 파라미터가 사용됩니다.
이는 서버 운영 중 config set 명령으로 설정 가능합니다.   서버 설치 후 디폴트 값으로 활성화됩니다.

  • slowlog-log-slower-than: 여기 설정한 시간(microseconds) 이상인 명령을 기록합니다. 단위는 마이크로초(microseconds)입니다. Default는 10000(10ms)입니다.   0(영)으로 설정하면 모든 명령을 기록합니다.
    비활성화하려면 음수(마이너스)로 설정합니다.
  • slowlog-max-len: 여기 설정한 것만큼 보관합니다. Default는 128입니다.   제한은 없습니다.   꽉 차면 오래된 것부터 지우고 새것이 기록됩니다.


SLOWLOG Subcommand

Slowlog 명령에는 총 3개의 subcommand가 있다.

  • GET: 사용법   slowlog get
    Slowlog에 기록된 시각(Linux timestamp), 수행시간, 명령, 클라이언트 정보를 조회해 볼 수 있다.
  • GETH: 사용법   slowlog geth
    위 내용을 보기 쉬운 형태로 보여줍니다.
  • LOG: 사용법   slowlog log
    Slowlog를 로그 파일에 기록합니다.
  • LEN: 사용법   slowlog len
    몇 개가 기록되었는지 조회해 볼 수 있다.
  • RESET: 사용법   slowlog reset
    Slowlog 기록을 삭제한다.   복구할 수 없다.

SLOWLOG GET [숫자]

Slowlog 기록을 보여준다.   숫자는 몇 개를 보여줄지 정한다. 숫자를 입력하지 않으면 디폴트 10개이다.
다음 네 항목을 보여준다.

  • ID: 증가하는 일련번호
  • 실행시각(Linux timestamp)
  • 수행시간(microseconds)
  • 명령: value의 길이가 128바이트보다 크면 128바이트와 (more bytes)가 표시됩니다. Subcommand(option)는 32개까지만 표시됩니다.
  • client ip:port : 버전 4.0에서 추가
  • client name : 버전 4.0에서 추가, client name은 "client setname" 명령으로 지정할 수 있습니다.
실행 예



SLOWLOG GETH [숫자]

일시, 소요시간 등을 보기 쉽게 보여줍니다. H는 human의 약자입니다.
Slowlog가 명령 실행시간을 볼 수 있는 유일하고 유용한 방법임에도 불구하고 잘 사용되지 않는 것은 '실행 시각'이 숫자로만 나오고 다른 항목도 설명이 없어서 일것입니다. 파악하기 쉽도록 했으니 유용하게 사용하시기 바랍니다.

이 기능은 Enterprise 버전에서 사용 가능합니다.

SLOWLOG LOG

Slowlog를 로그 파일에 기록합니다. 기록 후 Reset해서 메모리에 있던 내용을 지웁니다.
Slowlog의 문제점 중 하나는 메모리에 기록하기 때문에 기록 개수에 제한을 두고 있다는 것입니다. 디폴트로 128개입니다. 128개가 초과되면 기존 내용이 지워지고 다시 기록됩니다. 그래서 로그 파일에 기록할 수 있도록 했습니다.
Slowlog.log파일이 있으면 slowlog 파일에 기록되고 없으면 redis.log 파일에 기록됩니다.

이 기능은 Enterprise 버전에서 사용 가능합니다.

SLOWLOG LEN

Slowlog에 기록된 개수를 보여준다.
실행 예


SLOWLOG RESET

기록을 지운다.
실행 예

Slowlog 명령 자체도 기록으로 남기기 때문에 slowlog len에서 1이 나온것이다.


SLOWLOG Internal Data Structure

Slowlog는 리스트(list) 자료구조에 저장된다.


SLOWLOG 소스코드

slowlog-log-slower-than와 slowlog-max-len의 default 값이 server.h에 정의되어 있다.


server.c : 모든 명령을 실행하는 call()에서 마이크로초로 수행시간(duration)을 측정하고, 설정에 따라 Latency 나 Slowlog에 기록을 남긴다.
Call()에서 실행하지 않는 특별한 경우는 기록에 남지 않는다.   예를 들어, debug populate 명령은 dbAdd()를 직접 실행하기 때문에 Slowlog 기록되지 않는다.


slowlog.h : slowlogEntry struct


slowlog.c: function 설명
slowlog functions relation

    그림 1-1   Slowlog functions relation

각 function에 대한 간단한 설명입니다.
  • slowlogCommand: slowlog 명령을 수행한다.
  • slowlogReset: slowlog reset을 수행한다.   slowlogCommand()에서 호출된다.
  • slowlogPushEntryIfNeeded: Slowlog를 기록하는 메인 function이다.
  • slowlogCreateEntry: slowlogEntry 구조체를 할당하고 기록한다.   slowlogPushEntryIfNeeded()에서 호출된다.
  • slowlogInit: server.c의 initServer()에서 서버 시작 시 한번 호출되며, 리스트 구조체를 만들고 초기화한다.
  • slowlogFreeEntry: SlowlogEntry 메모리를 해제(free)한다.   slowlogInit()에서 호출된다.


SLOWLOG 관련 참고 자료


명령문

SLOWLOG subcommand [argument]

  • 이 명령은 version 2.2.12 부터 사용할 수 있다.
Clients for C Hiredis

<< DEBUG SLOWLOG LATENCY >>

조회수 :

Email 返事がかかってなれば、メールでお知らせします。