>  기사  >  데이터 베이스  >  Redis 느린 쿼리 란 무엇입니까?

Redis 느린 쿼리 란 무엇입니까?

藏色散人
藏色散人원래의
2020-11-04 17:12:143584검색

Redis 느린 쿼리는 명령 실행 시간이 상대적으로 긴 쿼리를 말합니다. 느린 쿼리 로그는 Redis 서버가 명령 실행 전후에 각 명령의 실행 시간을 계산하여 특정 임계값을 초과하는 경우입니다. 로그에 기록됩니다. 느린 쿼리가 발생한 시간과 실행 시간, 특정 명령 및 기타 정보가 표시됩니다.

Redis 느린 쿼리 란 무엇입니까?

추천: "redis 튜토리얼"

느린 쿼리란 무엇인가요?

느린 쿼리는 이름 그대로 상대적으로 느린 쿼리인데, 정확히 어디에서 느린가요? 먼저 Redis 명령 실행의 전체 과정을 이해해보자:

  1. 명령 보내기
  2. 명령 대기열
  3. 명령 실행
  4. 결과 반환

느린 쿼리의 정의에서 통계가 상대적으로 느린 기간 이 단계를 실행하는 명령입니다. 느린 쿼리가 없다고 해서 클라이언트에 시간 초과 문제가 없다는 의미는 아닙니다. 네트워크 전송이 지연되거나 대기 중인 명령이 더 있을 수 있습니다.

Redis의 명령 실행 대기열 메커니즘으로 인해 쿼리가 느리면 다른 명령이 계단식으로 차단됩니다. 따라서 클라이언트에서 요청 시간이 초과되면 해당 시점에 느린 쿼리가 있는지 확인해야 합니다. 느린 쿼리로 인한 문제를 분석합니다.

느린 쿼리 로그란 무엇인가요?

느린 쿼리 로그는 Redis 서버가 명령 실행 전후에 각 명령의 실행 시간을 계산하여 특정 임계값을 초과하는 경우 기록하는 로그입니다. 로그에는 느린 쿼리가 발생한 시간은 물론 실행 시간, 특정 명령 및 기타 정보가 기록되어 개발 및 운영 및 유지 관리 담당자가 시스템에 존재하는 느린 쿼리를 찾는 데 도움이 될 수 있습니다.

느린 쿼리 로그를 얻는 방법은 무엇입니까?

slowlog get 명령을 사용하여 느린 쿼리 로그를 얻을 수 있습니다. 또한 slowlog get 뒤에 숫자를 추가하여 가져올 느린 쿼리 로그 수를 지정할 수도 있습니다. 예를 들어 3개의 느린 쿼리 로그를 가져옵니다.

> slowlog get 3
1) 1) (integer) 6107
   2) (integer) 1616398930
   3) (integer) 3109
   4) 1) "config"
      2) "rewrite"
2) 1) (integer) 6106
   2) (integer) 1613701788
   3) (integer) 36004
   4) 1) "flushall"
3) 1) (integer) 6105
   2) (integer) 1608722338
   3) (integer) 20449
   4) 1) "scan"
      2) "0"
      3) "MATCH"
      4) "*comment*"
      5) "COUNT"
      6) "10000"
slowlog get命令获取慢查询日志,在slowlog get后面还可以加一个数字,用于指定获取慢查询日志的条数,比如,获取3条慢查询日志:
> slowlog len
(integer) 121

从上面的例子中,可以看出每一条慢查询日志都有4个属性组成:

  1. 唯一标识ID
  2. 命令执行的时间戳
  3. 命令执行时长
  4. 执行的命名和参数

如何获取慢查询日志的长度?

可以使用slowlog len命令获取慢查询日志的长度,比如:

> slowlog len
(integer) 121
> slowlog reset
OK
> slowlog len
(integer) 0

在上例中,当前Redis中有121条慢查询日志。

如何清理慢查询日志?

可以使用slowlog reset위의 예에서 각 느린 쿼리 로그는 4개의 속성으로 구성되어 있음을 알 수 있습니다.

고유 식별 ID

명령 실행 타임스탬프
  1. 명령 실행 기간
  2. 실행 이름 지정 및 매개변수

느린 쿼리 로그의 길이를 가져오는 방법은 무엇입니까?

slowlog len 명령을 사용하면 느린 쿼리 로그의 길이를 확인할 수 있습니다. 예:

slowlog-log-slower-than 1000
slowlog-max-len 1200

위의 예에서는 현재 Redis에 121개의 느린 쿼리 로그가 있습니다.

느린 쿼리 로그를 어떻게 지우나요?

slowlog 재설정 명령을 사용하여 느린 쿼리 로그를 지울 수 있습니다. 예:

> config set slowlog-log-slower-than 1000
OK
> config set slowlog-max-len 1200
OK
> config rewrite
OK
느린 쿼리 매개변수를 구성하는 방법은 무엇입니까?

위에서 언급했듯이 느린 쿼리에는 다음 두 가지 구성이 필요합니다.

명령 실행 시간에 대한 임계값을 지정합니다.

느린 쿼리 로그 수를 저장합니다.

Redis는 Slowlog-log-slower-than과 Slowlog-max-len이라는 두 가지 매개변수를 제공합니다. 다음으로 이 두 가지 매개변수를 자세히 소개하겠습니다.

slowlog-log-slower-than

🎜slowlog-log-slower-than은 명령 실행 시간의 임계값을 지정하는 데 사용됩니다. 명령 실행 시간이 이 임계값을 초과하면 기록됩니다. 단위는 마이크로초(1초 = 1000밀리초 = 1000000마이크로초)이며 기본값은 10000마이크로초입니다. Slowlog-log-slower-than이 0으로 설정되면 모든 명령이 기록됩니다. Slowlog-log-slower-than이 0보다 작게 설정되면 로그에 명령이 기록되지 않습니다. 🎜🎜실제 프로덕션 환경에서는 Redis 동시성에 따라 이 구성을 조정해야 합니다. Redis는 단일 스레드를 사용하여 명령에 응답하므로 명령 실행 시간이 1000마이크로초를 초과하는 경우 Redis는 최대 1000OPS 미만을 지원할 수 있습니다. 따라서 높은 동시성 시나리오에서는 Redis를 🎜1000마이크로초🎜로 설정하는 것이 좋습니다. . 🎜🎜slowlog-max-len🎜🎜slowlog-max-len은 저장할 느린 쿼리 로그의 최대 개수를 지정하는 데 사용됩니다. 실제로 Redis는 느린 쿼리 로그를 저장하기 위해 목록을 사용하며, 이 목록의 최대 길이는 Slowlog-max-len입니다. 새 명령이 느린 쿼리 조건을 충족하면 이 목록에 삽입됩니다. 느린 쿼리 로그 목록이 최대 길이에 도달하면 가장 먼저 삽입된 명령이 목록에서 제거됩니다. 예를 들어, Slowlog-max-len은 10으로 설정됩니다. 11번째 명령이 삽입되면 목록의 첫 번째 명령이 먼저 제거되고 11번째 명령이 목록에 추가됩니다. 🎜🎜느린 쿼리를 기록한다는 것은 Redis가 긴 명령을 자르고 많은 양의 메모리를 차지하지 않는다는 것을 의미합니다. 실제 프로덕션 환경에서는 느린 쿼리가 제거될 가능성을 줄이고 느린 쿼리를 보다 편리하게 찾기 위해 느린 쿼리 로그의 길이를 크게 조정하는 것이 좋습니다. 예를 들어 🎜1000 이상🎜으로 설정할 수 있습니다. 🎜🎜구성 방법🎜🎜Redis에서 구성을 수정하는 방법에는 두 가지가 있습니다.🎜
  1. 修改Redis配置文件。比如,把slowlog-log-slower-than设置为1000,slowlog-max-len设置为1200:
slowlog-log-slower-than 1000
slowlog-max-len 1200
  1. 使用config set命令动态修改。比如,还是把slowlog-log-slower-than设置为1000,slowlog-max-len设置为1200:
> config set slowlog-log-slower-than 1000
OK
> config set slowlog-max-len 1200
OK
> config rewrite
OK

如果要Redis把配置持久化到本地配置文件,需要执行config rewrite命令。

总结

慢查询指的是命令执行时长比较长的查询。通过slowlog get命令获取慢查询日志;通过slowlog len命令获取慢查询日志的长度;通过slowlog reset命令清理慢查询日志。通过slowlog-log-slower-than配置命令执行时长的阈值;通过slowlog-max-len配置慢查询日志最多存储的条数


위 내용은 Redis 느린 쿼리 란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.