Redis慢查询分析

news/2025/1/2 1:55:16/

慢查询分析

谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来。
在这里插入图片描述
执行一条命令分为如下4个部分:

  1. 发送命令
  2. 命令排队
  3. 命令执行
  4. 返回结果
    需要注意,慢查询只统计步骤4的时间,所以没有慢查询并不代表客户端没有超时问题。

慢查询的两个配置参数

对于慢查询功能,需要明确两件事:

  • 预设阀值怎么设置?
  • 慢查询记录存放在哪?
    Redis提供了slowlog-log-slower-than和slowlog-max-len配置来解决这两个问题。从字面意思就可以看出,slowlog-log-slower-than就是那个预设阀值,它的单位是微秒(1秒=1000毫秒=1000000微秒),默认值是10000。

log-log-slower-than=0会记录所有的命令
slowlog-log-slowerthan<0对于任何命令都不会进行记录
slowlog-max-len只是说明了慢查询日志最多存储多少条

在Redis中有两种修改配置的方法,

  • 修改配置文件
  • 使用config set命令动态修改。例如下面使用config set命令将slowlog-log-slower-than设置为20000微秒,slowlog-max-len设置为1000:
config set slowlog-log-slower-than 20000
config set slowlog-max-len 1000
config rewrite

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

获取慢查询日志

(1)慢日志获取

slowlog get [n]
结果:

127.0.0.1:6379> slowlog get
1) 1) (integer) 666
176
2) (integer) 1456786500
3) (integer) 11615
4) 1) "BGREWRITEAOF"
2) 1) (integer) 665
2) (integer) 1456718400
3) (integer) 12006
4) 1) "SETEX"
2) "video_info_200"
3) "300"
4) "2"
...

可以看到每个慢查询日志有4个属性组成,分别是慢查询日志的标识id、发生时间戳、命令耗时、执行命令和参数。

(2)获取慢查询日志列表当前的长度
slowlog len
例如,当前Redis中有45条慢查询:

127.0.0.1:6379> slowlog len
(integer) 45

(3)慢查询日志重置

slowlog reset

实际是对列表做清理操作,例如:

127.0.0.1:6379> slowlog len
(integer) 45
127.0.0.1:6379> slowlog reset
OK
127.0.0.1:6379> slowlog len
(integer) 0

最佳实践

  • slowlog-max-len配置建议:线上建议调大慢查询列表,记录慢查询时Redis会对长命令做截断操作,并不会占用大量内存。增大慢查询列表可以减缓慢查询被剔除的可能,例如线上可设置为1000以上。
  • slowlog-log-slower-than配置建议:默认值超过10毫秒判定为慢查询,需要根据Redis并发量调整该值。由于Redis采用单线程响应命令,对于高流量的场景,如果命令执行时间在1毫秒以上,那么Redis最多可支撑OPS不到1000。因此对于高OPS场景的Redis建议设置为1毫秒。

http://www.ppmy.cn/news/593526.html

相关文章

【Java】时差问题,格林威治时间(GMT)与北京时间转换

格林威治时间加上8h即为北京时间 本文以格林威治时间转为北京时间为例&#xff0c;若需将北京时间转为格林威治时间只需将文中8改为-8即可 1. 时间格式为&#xff1a;2021-01-04T04:16:23.609Z 此处T为分隔符&#xff0c;Z为时区 package org.example;import java.text.Pars…

微软电脑怎么设置时间服务器地址,如何配置Internet时间设置,让电脑时间与北京时间分秒不差...

分秒不差的时间在如今这个时代什么时候最有用呢&#xff1f;呵呵&#xff0c;就是秒杀商品时。之前天猫搞了一个秒杀活动&#xff0c;就因为Microsoft酋长相信了电脑上的时间&#xff0c;结果比准确的北京时间晚了10多秒&#xff0c;错过了时机。而且今天Microsoft酋长之所以写…

关于分行数字化转型工作的几点思考

关于分行数字化转型工作的几点思考 作者&#xff1a;北京银行盛瀚 1、数字化转型到底是什么&#xff1f; 目前不论是从国家战略层面还是地方政府重点工程&#xff0c;乃至企业规划报告&#xff0c;数字化转型是被提及最多的字眼之一&#xff0c;尤其是《“十四五”数字经济发展…

C/C++ 时间知识总结

文章目录 C/C 中时间的概念常用的时间库函数time()asctime()gmtime()ctime()localtime()mktime()strftime()difftime() C/C 获取当前&#xff08;本地&#xff09;时间的方法方法一方法二方法三方法四方法五 C/C 中时间的概念 Unix 时间戳&#xff08;Unix timestamp&#xff…

将UTC时间(2018-07-03T10:18:58.000Z)转换为北京时间

2018-07-03T10:18:58.000Z是什么时间格式 UTC&#xff1a;时间标准时间&#xff0c;世界标准时间 ✅ GMT&#xff1a;格林尼治时间 GST&#xff1a;北京时间 js如何处理UTC时间格式 遇到问题&#xff1a;用了阿里云的接口&#xff0c;发现传的日期是UTC格式的。需要转换。…

mysql显示的是北京时间,现在只取时间或只取日期

一、如图&#xff0c;显示的是北京时间&#xff0c;现在只取时间或只取日期&#xff0c; 用date_format这个函数 1、只取时间 &#xff0c;DATE_FORMAT(date,format)&#xff0c;date 参数是合法的日期&#xff0c;format 规定日期/时间的输出格式。 可以使用的格式有&#xf…

js如何获取计算机当前时间,js获取当前系统时间

var myDate new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-????) myDate.getMonth(); //获取当前月份(0-11,0代表1月) myDate.getDate(); //获取当前日(1-31) myDate.getDay(); //获取当前星期X(0-6,0代表星期天) …

UTC时间 GMT时间 本地时间 北京时间 时区 夏令时简要说明

1.UTC时间 与 GMT时间 整个地球分为二十四时区&#xff0c;每个时区都有自己的本地时间。为了统一起见&#xff0c;使用一个统一的时间&#xff0c;称为通用协调时(UTC, Universal Time Coordinated)。UTC与格林尼治平均时(GMT, Greenwich Mean Time)一样&#xff0c;都与英国…