zoukankan      html  css  js  c++  java
  • Redis的慢查询问题总结

     什么是慢查询日志?

    慢查询日志是Redis服务端在命令执行前后计算每条命令的执行时长,当超过某个阈值是记录下来的日志。日志中记录了慢查询发生的时间,还有执行时长、具体什么命令等信息,它可以用来帮助开发和运维人员定位系统中存在的慢查询。

    慢日志配置
    查看redis慢日志配置,登陆redis服务器,使用redis-cli客户端连接redis server
    使用命令 config get slow*

    1 127.0.0.1:6379> config get slow*
    2 1) "slowlog-log-slower-than"
    3 2) "10000"
    4 3) "slowlog-max-len"
    5 4) "128"

    慢日志说明:
    config get slow* 查询有关慢日志的配置信息
    查询结果第一条: 1) "slowlog-log-slower-than" 慢日志阈值配置项
    查询结果第二条: 2) "10000" 阈值 ,单位微秒,此处为10毫秒,即超过10毫秒的操作都会记录下来
    查询结果第三条: 3) "slowlog-max-len" 慢日志记录保存数量,如果保存数量已满,会删除最早的记录,最新的记录追加进来
    查询结果第四条: 4) "1000" 慢日志记录保存数量的阈值,此处保存1000条记录

    查看慢日志记录
    查看redis慢日志记录,登陆redis服务器,使用redis-cli客户端连接redis server
    使用命令 SLOWLOG GET N,查询结果如下图所示:

    1) (integer) 65
    2) (integer) 1500621891
    3) (integer) 1186934
    4) 1) "keys"
       2) "*CAP:*"
    1) (integer) 65 值65数据类型为integer,表示该条日志的id
    2) (integer) 1500621891  值1500621891数据类型为integer,表示操作redis的unix时间戳,单位秒。
    3) (integer) 1186934 操作耗时,单位微秒
    4)  1) "keys" 操作redis的命令 keys
       2) "*CAP:*" 操作redis的命令keys 的参数,即查询所有包含CAP字符串的key

    把操作redis的unix时间戳换算成北京时间为 2017/7/21 15:24:51 ,与某系统交易耗时的日志时间点一吻合。某系统交易耗时时间点二的问题也是如此。
    结论:
    Redis命令keys * 、 keys *xxx* 会遍历所有key,以查找符合条件的key,当数据量较大时该命令比较耗时,因为redis是单线程,当该命令执行的过程当中会阻塞其他命令请求,如果此时应用系统请求redis,所有的请求都会等待。在生环境中,严禁使用keys * 、 keys *xxx*,最好的办法是禁用相关命令。
    补充说明:慢日志中的"BGREWRITEAOF"是redis fork的另外的子进程在执行aof文件重新,该操作不会影响应用对redis的读写请求。

    郭慕荣博客园
  • 相关阅读:
    oralce索引的使用
    oracle中connect by prior的使用
    oracle函数listagg使用
    oracle函数的使用
    redis高可用集群搭建
    Node.js安装及环境配置之Windows篇
    Repeater 合并单元格
    c#16进制转浮点数单精度类型
    EF Core 实体映射表或视图
    docker 构建filebeat镜像
  • 原文地址:https://www.cnblogs.com/jelly12345/p/14451982.html
Copyright © 2011-2022 走看看