Redis慢查询功能详解:快速定位性能瓶颈快速读写,从而缓解应用数据库的压力,提升应用处理能力。很多数据库都提供了慢查询日志,帮助开发者和运维人员定位系统中的慢操作。所谓慢查询日志,就是系统计算每条命令执行前后的执行时间。当然,数据库中最常见的就是select这些SQL语句。当超过预设的阈值时,记录这条命令的相关信息(例如:发生时间、耗时、命令详情),其实Redis也提供了类似的功能。1、相关参数Redis主要提供了两个配置参数slowlog-log-slower-than和slowlog-max-len来提供这个功能。这两个参数分别用于设置慢查询的阈值和存储慢查询的记录。当slowlog-log-slower-than参数设置为慢语句时,只有大于slowlog-log-slower-than的redis命令执行时间才会被定义为慢查询,并被slowlog记录。它的单位是微秒(1秒=1000毫秒=1000000微秒)。在初始情况下,默认值为10000,即10ms。如果执行的是慢命令,如果它的执行时间超过10ms,那么就会记录在慢查询日志中。(如果slowlog-log-slower-than=0会记录所有命令,slowlog-log-slowerthan<0则不会记录任何命令)slowlog-max-len表示慢查询日志最多可以存储多少条记录,实际上Redis使用一个链表来存储慢查询日志,slowlog-max-len是链表的最大长度,它本身就是一个先进先出的队列,当slowlog超过设置的最大值时,最早的slowlog会被删除。简而言之,当一条新命令满足慢查询条件时,就会被插入到这个列表中。当慢查询日志列表达到最大长度时,最早插入的命令将从列表中移除,比如slowlog-max-如果len设置为50,当第51个慢查询插入时,第一个数据在队列的头部将被出队,第51个慢查询将被入队。二、设置Redis慢查询1、临时配置:动态配置的CONFIG命令#查看>configgetslowlog-log-slower-than>configgetslowlog-max-len#配置查询时间超过1mm的命令记录保存500条慢查询记录>configsetslowlog-log-slower-than1000>configsetslowlog-max-len500注意通过config命令的配置是动态生效的。一旦服务重新启动,它将恢复为默认设置。所以排错的时候建议通过config进行配置,但是在服务稳定之后,修改配置文件做最后的确认(可以通过configrewrite命令持久化到本地文件,但是主要是redis启动的时候,redis.conf文件必须指定此命令才能生效)。2.永久配置:配置redis.conf文件#viredis.confslowlog-log-slower-than1000slowlog-max-len5003.查看Redis慢查询记录查看记录的日志,主要使用SLOWLOGGET或者SLOWLOGGETnumber命令,前者会输出所有慢日志,最大长度取决于slowlog-max-len选项的值,SLOWLOGGETnumber只会打印指定数量的日志。查看当前日志条数:使用slowloglen命令查看日志条数。如果日志过多,也可以使用slowlogreset命令清除日志。部分记录说明:3)1)(integer)25#unique(唯一)日志标识2)(integer)1565951323#记录命令的执行时间点,以UNIX时间戳格式表示3)(integer)22720#查询执行时间,以微秒为单位4)1)"SMEMBERS"#执行的命令,以数组的形式排列2)"spring:session:expirations:1565950980000"#这里完整的命令是SMEMBERSspring:session:expirations:1565950980000
