前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis性能分析

Redis性能分析

作者头像
用户1560186
发布2019-11-19 14:54:10
1.2K0
发布2019-11-19 14:54:10
举报
文章被收录于专栏:运维录运维录
前言

redis性能分析常见的有以下几个方面:

  • redis slowlog分析
  • SCAN,SSCAN,HSCAN和ZSCAN命令的使用方法
  • redis是否受到系统使用swap
  • redis watchdog定位延时
  • 关于redis的延时监控框架,可参考官网资料下面我们分别从这几个方面来介绍
redis slowlog分析
  1. 慢查询设置在Redis中有两种修改配置的方法,一种是修改配置文件
代码语言:javascript
复制
slowlog-log-slower-than 10000  #查询时间超过10ms的会被记录  
slowlog-max-len 128            # 最多记录128个慢查询  

另一种是使用config set命令动态修改.例如下面使用config set命令将slowlog-log-slower-than设置为20000微秒.slowlog-max-len设置为1024

代码语言:javascript
复制
config set slowlog-log-slower-than 20000
config set slowlog-max-len 1024
config rewrite

如果需要将Redis将配置持久化到本地配置文件,要执行config rewrite命令,如果slowlog-log-slower-than=0会记录所有命令,slowlog-log-slower-than<0对于任何命令都不会进行记录

  1. 获取慢查询日志slowlog get [n]
代码语言:javascript
复制
127.0.0.1:6379> slowlog get 15
 1) 1) (integer) 79674  #slowlog的唯一编号
    2) (integer) 1523350838 #此次slowlog事件的发生时间  
    3) (integer) 2987577    #耗时,以微秒为单位
    4) 1) "KEYS"
       2) "mid_cache_app_list_*"
  1. 获取慢查询日志列表当前长度
代码语言:javascript
复制
127.0.0.1:6379> slowlog len
(integer) 128
  1. 慢查询日志重置
代码语言:javascript
复制
slowlog reset
  1. 建议:slowlog-max-len 建议线上设置为1000以上slowlog-log-slower-than对高流量场景应该设置在1毫秒以上慢查询只记录命令的执行时间,并不包括命令排队和网络传输时间.因此客户端执行命令的时间会大于命令的实际执行时间.因为命令执行排队机制,慢查询会导致其他命令级联阻塞,因此客户端出现请求超时时,需要检查该时间点是否有对应的慢查询,从而分析是否为慢查询导致的命令级联阻塞.
SCAN,SSCAN,HSCAN和ZSCAN命令的使用方法
  1. SCAN是基于游标的迭代器。每次调用命令时,服务器返回一个更新的游标,用户需要在下一次调用中用作游标参数。当游标设置为0时,迭代开始,并且当服务器返回的游标为0时终止迭代开始游标值为0的迭代,并调用SCAN,直到返回的游标再次为0,称为完全迭代
代码语言:javascript
复制
127.0.0.1:6379> scan 0  
127.0.0.1:6379> scan 0 count 20 #指定输出的数量
127.0.0.1:6379> scan 0 match *mid_sent*   #类似于keys命令按模式匹配
  1. sscan查询sets集合的方法:
代码语言:javascript
复制
redis 127.0.0.1:6379> sadd setone 1 2 3 foo foobar feelsgood  
(integer) 6  
redis 127.0.0.1:6379> sscan setone 0 match f*  
1) "0"  
2) 1) "foo"  
   2) "feelsgood"  
   3) "foobar"  
  1. hscan查询hash集合的方法:
代码语言:javascript
复制
redis 127.0.0.1:6379> hmset hash name Tom age 35  
OK  
redis 127.0.0.1:6379> hscan hash 0  
1) "0"  
2) 1) "name"  
   2) "Tom"  
   3) "age"  
   4) "35"  
  1. Linux内核启用了透明巨页功能时,Redis在使用fork调用之后会产生大的延迟代价,以便在磁盘进行数据持久化
代码语言:javascript
复制
echo never > /sys/kernel/mm/transparent_hugepage/enabled  

需重启redis才能生效

redis是否受到系统使用swap
代码语言:javascript
复制
#查找redis进程id: 
redis-cli -p 6319 info|grep process_id  
process_id:9213  
#查看redis进程的内存使用信息: 
cd /proc/9213
#查看该进程使用swap分区的统计信息,以不使用或只有少量的4kB为佳: 
cat smaps | grep 'Swap:'  
#同时打印出内存映射和swap使用信息:查看那些较大的内存消耗是否引发了大的swap使用  
cat smaps | egrep '^(Swap:Size)'  
redis watchdog定位延时

注意:实验功能,请确保redis数据已备份,会对redis服务性能产生影响

代码语言:javascript
复制
Redis software watchdog  
#该功能只能动态启用,使用以下命令: 
CONFIG SET watchdog-period 500  
#注:redis会开始频繁监控自身的延时问题,并把问题输出到日志文件中去。 
  
#关闭watchdog: 
CONFIG SET watchdog-period 0  
Redis latency monitoring framework
代码语言:javascript
复制
CONFIG SET latency-monitor-threshold 100 

默认情况下,阈值设置为0,即禁用redis监控。实际上启用该监控功能,对redis所增加的成本很少.

LATENCY命令的使用方法

  1. 查看最新的延时事件
代码语言:javascript
复制
127.0.0.1:6379> latency latest  
1) 1) "command"     #event name  
   2) (integer) 1480865648     #发生时间  
   3) (integer) 207     #耗时,毫秒  
   4) (integer) 239     #从redis启动或上次latency reset以来,这种事件的最大延时记录  
  1. 查看延时事件的历史信息
代码语言:javascript
复制
127.0.0.1:6379> latency history command  
  1) 1) (integer) 1480865710  
     2) (integer) 207  
  2) 1) (integer) 1480865711  
     2) (integer) 217  
  1. LATENCY DOCTOR延时事件统计信息的智能分析与建议
代码语言:javascript
复制
127.0.0.1:6379> latency doctor  
Dave, I have observed latency spikes in this Redis instance.  
You don't mind talking about it, do you Dave?  
1. command: 5 latency spikes (average 300ms, mean deviation 120ms,  
  period 73.40 sec). Worst all time event 500ms.  
I have a few advices for you:  
- Your current Slow Log configuration only logs events that are  
  slower than your configured latency monitor threshold. Please  
  use 'CONFIG SET slowlog-log-slower-than 1000'.  
- Check your Slow Log to understand what are the commands you are  
  running which are too slow to execute. Please check  
  http://redis.io/commands/slowlog for more information. 
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维录 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • redis slowlog分析
  • SCAN,SSCAN,HSCAN和ZSCAN命令的使用方法
  • redis是否受到系统使用swap
  • redis watchdog定位延时
  • Redis latency monitoring framework
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档