美文网首页
慢查询分析

慢查询分析

作者: Robin92 | 来源:发表于2019-12-11 22:03 被阅读0次

    ——《Redis 开发与运维》第三章


    存储系统提供慢查询日志可以帮助开发和运维排查系统中存在的慢操作。

    慢查询统计的哪部分时间

    在 Redis 命令周期中有 4 个部分:

    • 发送命令。客户端到服务器命令的传输。
    • 命令排队。Redis 作为单线程架构,命令逐个执行的排队。
    • 执行命令。服务器真正执行命令的时间。正是对慢查询有作用的时间。
    • 返回结果。服务器到客户端的传输。

    慢查询统计的主要是 Redis 命令的执行时间。

    多久算慢查询

    Redis 提供了参数 slowlog-log-slower-than 来设定慢查询的阈值,单位微秒,默认值 10000(即 10ms)。即,当执行某个操作的执行时间超过 10 ms 时,就会被记录在慢查询日志中。

    slowlog-log-slower-than=0 会记录所有查询日志。
    slowlog-log-slower-than<0 不会记录任何查询日志。

    慢查询日志存在哪里

    Redis 使用了一个固定大小(长度)的 列表 来存储慢查询日志,存储长度是通过 slowlog-max-len 来设定。按先进先出原则,当列表被填满后,最先进去的会被移除。

    如何配置

    慢查询设置有两种方法,一种是修改配置文件,另一种是使用 config set 动态修改配置:

    config set slowlog-log-slower-than 20000 # 设置大于 20ms 为慢查询
    config set slowlog-max-len 1000 # 设置存储 1000 条慢查询日志
    config rewrite # 持久化到本地配置文件中
    

    如何查看慢查询日志

    Redis 并没有暴露存储慢查询日志这个列表的键,而是通过一组命令来实现对慢查询日志的访问和管理。

    slowlog get [n] # 获取(n 条)慢查询日志
    slowlog len # 获取慢查询日志列表当前的长度
    slowlog reset # 重置(清理)慢查询日志
    

    获取慢查询日志由四部分组成(参考):ID、操作发生的时间、操作执行时间长度、命令和参数。

    image.png

    最佳实践

    配置建议:由于 Redis 是单线程响应命令,对于并发,每个命令执行时间为 1ms 时,Redis 最多可支撑的 QPS 不到 1000。因此,对于高 QPS 的场景建议设置为 1ms。

    排查问题注意:注意慢查询只记录的时命令的执行时间,不包括网络传输时间和命令排队时间,在排查问题时注意区分。

    持久化:慢查询日志时一个先进先出的队列,一般情况下,需要运维将慢查询日志持久化到其他存储中,然后制作可视化界面进行查询。

    相关文章

      网友评论

          本文标题:慢查询分析

          本文链接:https://www.haomeiwen.com/subject/dbbagctx.html