前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis:16---常用功能之(慢查询日志)

Redis:16---常用功能之(慢查询日志)

作者头像
用户3479834
发布2021-02-03 12:57:27
6020
发布2021-02-03 12:57:27
举报
文章被收录于专栏:游戏开发司机

一、慢查询日志介绍

  • 许多存储系统(例如MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息记录下来,Redis也提供了类似的功能
  • Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求,用户可以通过这个功能产生的日志来监视和优化查询速度
  • 客户端命令执行步骤一般分为4步:发送命令、命令排队、命令执行、返回结果。慢查询只统计命令执行的时间的时间,所以没有慢查询并不代表客 户端没有超时问题

二、慢查询的两个配置参数

  • slowlog-log-slower-than选项:指定执行时间超过多少微秒(1秒等于1000 000微秒)的命令请求会被记录到日志上
    • 举个例子,如果这个选项的值为100,那么执行时间超过100微秒的命令就会被记录到慢查询日志
    • 提示:如果slowlog-log-slower-than=0会记录所有的命令,slowlog-log-slowerthan<0对于任何命令都不会进行记录
  • slowlog-max-len选项:指定服务器最多保存多少条慢查询日志

慢查询日志数量的溢出

  • Redis使用了一个列表来存储慢查询日志,服务器使用先进先出的方式保存多条慢查询日志,当服务器存储的慢查询日志数量等于slowlog-max-len选项的值时,服务器在添加一条新的慢查询日志之前,会先将最旧的一条慢查询日志删除
  • 举个例子,如果服务器slowlog-max-len的值为100,并且假设服务器已经储存了100条慢查询日志,那么如果服务器打算添加一条新日志的话,它就必须先删除目前保存的最旧的那条日志,然后再添加新日志

配置参数的设置

  • 可以使用CONFIG命令设置配置参数的值
代码语言:javascript
复制
config set slowlog-log-slower-than 20000
config set slowlog-max-len 1000
config rewrite

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

三、慢查询日志的格式

  • 以下面的图片为例:
    • 1)日志的唯一标识符
    • 2)命令执行时的UNIX时间戳
    • 3)命令执行的时常(单位微秒)
    • 4)命令以及命令参数
    • 5)命令执行的客户端IP与端口

四、SLOWLOG命令

  • SLOWLOG GET:用来查看服务器所保存的慢查询日志
  • SLOWLOG RESET:用于清空所有慢查询日志
  • SLOWLOG LEN:查询慢查询日志的数量

SLOWLOG GET演示案例

  • 首先使用CONFIG SET命令将服务器slowlog-log-slower-than选项设置为0,那么每条执行的命令都会被记录到慢查询日志
  • 然后再使用CONFIG SET命令将slowlog-max-len选项设置为5,那么服务器最多只能保存5条慢查询日志
  • 接下来执行3条命令
  • 记着查询慢查询日志,可以看到上面我们执行的5条命令

五、最佳实践

  • 慢查询功能可以有效地帮助我们找到Redis可能存在的瓶颈,但在实际使用过程中要注意以下几点:
    • slowlog-max-len配置建议:线上建议调大慢查询列表,记录慢查询时 Redis会对长命令做截断操作,并不会占用大量内存。增大慢查询列表可以 减缓慢查询被剔除的可能,例如线上可设置为1000以上。
    • slowlog-log-slower-than配置建议:默认值超过10毫秒判定为慢查询, 需要根据Redis并发量调整该值。由于Redis采用单线程响应命令,对于高流 量的场景,如果命令执行时间在1毫秒以上,那么Redis最多可支撑OPS不到 1000。因此对于高OPS场景的Redis建议设置为1毫秒
    • 慢查询只记录命令执行时间,并不包括命令排队和网络传输时间。因 此客户端执行命令的时间会大于命令实际执行时间。因为命令执行排队机 制,慢查询会导致其他命令级联阻塞,因此当客户端出现请求超时,需要检 查该时间点是否有对应的慢查询,从而分析出是否为慢查询导致的命令级联 阻塞
    • 由于慢查询日志是一个先进先出的队列,也就是说如果慢查询比较多的情况下,可能会丢失部分慢查询命令,为了防止这种情况发生,可以定期 执行slow get命令将慢查询日志持久化到其他存储中(例如MySQL),然后 可以制作可视化界面进行查询,后面文章介绍的Redis私有云CacheCloud提供了这样的功能,好的工具可以让问题排查事半功倍
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 游戏开发司机 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、慢查询日志介绍
  • 二、慢查询的两个配置参数
    • 慢查询日志数量的溢出
      • 配置参数的设置
      • 三、慢查询日志的格式
      • 四、SLOWLOG命令
        • SLOWLOG GET演示案例
        • 五、最佳实践
        相关产品与服务
        云数据库 Redis®
        腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档