> 데이터 베이스 > Redis > Redis 운영 및 유지 관리 느린 쿼리 로그

Redis 운영 및 유지 관리 느린 쿼리 로그

齐天大圣
풀어 주다: 2020-05-14 11:55:51
원래의
1807명이 탐색했습니다.

Redis를 잘 사용하려면 API 사용법뿐만 아니라 Redis의 차단 방지 방법과 차단 여부를 확인하고 분석하는 방법도 알아야 합니다. 오늘은 Redis의 차단을 검색하는 방법, 즉 느린 쿼리를 통해 차단된 명령을 찾는 방법에 대해 이야기하겠습니다.

Mysql과 마찬가지로 Redis도 쿼리 기록이 느립니다. 명령 실행 시간이 설정값을 초과하면 명령이 느린 쿼리 목록에 기록됩니다. 쿼리가 느리면 프로그램을 개선할 수 있습니다. Redis가 차단되는 것을 방지합니다.

Configuration

느린 쿼리에는 두 가지 구성 매개변수가 있습니다.

  • slowlog-log-slower-than

  • slowlog-max-len

slowlog-log-slower-than 이다 사용되는 임계값을 마이크로초 단위로 설정하려면 기본값은 10000(10밀리초)입니다.

  • 값을 0보다 작게 설정하면 명령이 기록되지 않습니다.

  • 값이 0이면 모든 명령이 기록됩니다.

slowlog-max-len은 최대 레코드 수를 나타냅니다. 기본값은 128입니다. 예를 들어 10으로 설정하면 11번째 느린 쿼리가 삽입되면 대기열의 선두에 있는 데이터가 대기열에서 제거됩니다. .

이 두 가지 구성은 동적 구성도 지원합니다. 프로젝트가 막 시작되었고 방문 횟수가 그리 많지 않은 경우에는 Slow-log-slower-than 값을 더 크게 설정할 수 있습니다. 방문 횟수가 증가하면 해당 값을 더 작은 값으로 변경해야 할 수도 있습니다. 하지만 우리는 redis 서비스를 중지하고 싶지 않으므로 구성을 동적으로 수정할 수 있습니다.

127.0.0.1:6379> config set slowlog-log-slower-than 1000
OK  
# 在线修改配置
127.0.0.1:6379> config rewrite
OK
# 将修改的配置持久化到配置文件中
로그인 후 복사

운영 및 유지 관리 제안: 방문 횟수가 많은 경우 일반적으로 Slowlog-log-slower-than을 1000 이하로 설정하는 것이 좋습니다. 이 값이 1000이면 Redis가 최대 1000개의 동시성을 지원할 수 있음을 의미합니다.

느린 쿼리 보기

redis의 느린 쿼리 보기는 mysql과 다릅니다. redis 보기에는 특별한 명령이 있습니다.

느린 쿼리 로그 가져오기

slowlog get [n], n은 항목 수를 나타내며 기본값은 10

127.0.0.1:6379> slowlog get
1) 1) (integer) 18004
   2) (integer) 1589424642
   3) (integer) 50
   4) 1) "slowlog"
      2) "get"
   5) "127.0.0.1:58364"
   6) ""
2) 1) (integer) 18003
   2) (integer) 1589423805
   3) (integer) 47
   4) 1) "slowlog"
      2) "get"
   5) "127.0.0.1:58364"
   6) ""
……
로그인 후 복사
  • 첫 번째 매개 변수는 로그 식별 ID 번호입니다

  • 두 번째 매개 변수 는 Poke 발생 시간입니다

  • 세 번째는 명령 실행 시간(마이크로초)

  • 마지막은 명령과 매개변수입니다.

느린 쿼리 길이 가져오기

slowlog len

127.0.0.1:6379> slowlog len
(integer) 128
로그인 후 복사

느린 쿼리 목록 지우기

127.0.0.1:6379> slowlog reset
OK
로그인 후 복사

느린 쿼리 로그를 mysql에 유지

길이 때문에 Redis에는 한계가 있으므로 느린 쿼리가 많으면 손실이 발생합니다. 우리는 정기적으로 redis로 이동하여 느린 쿼리 레코드 목록을 꺼내고 이를 mysql에 유지하여 이러한 일이 발생하지 않도록 할 수 있습니다.

의사 코드는 다음과 같습니다.

while (true) {
    $slowlen = $redis->slowlog('len');
    $slowlogs = $redis->slowlog('get',$slowlen);
    $insSql  = "INSERT INTO 
        slowlog(exec_time,run_time,command) VALUES";
     
    if (is_array($slowlogs) && count($slowlogs)) {
     
        foreach ($slowlogs as $slowlog) {
            $execTime = $slowlog[2];
            $runTime  = $slowlog[1];
            $command  = implode(' ', $slowlog[3]);
     
            $insSql .= "('$execTime', '$runTime','$command'),";
        }
     
        $flag = mysqli_query($mysqli, substr($insSql, 0, -1));
     
        if ($flag) {
            $redis->slowlog('reset');
        }
    }
    
    unsleep(10000);
}
로그인 후 복사

위 코드는 MYSQL에 대한 느린 쿼리의 지속성을 실현할 수 있습니다.

위 내용은 Redis 운영 및 유지 관리 느린 쿼리 로그의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿