redis 慢查询
什么是慢查询
MySQL会记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为慢查询,都记在慢查询日志里。
redis 的生命周期
- 客户端向Redis服务器发送命令
- 命令请求在请求队列中排队等待处理
- 执行命令
- 返回命令结果
redis 慢查询
- 慢查询发生在生命周期的第三阶段,是指仅仅执行命令阶段比较慢被称为慢查询。
- 客户端超时不一定是慢查询,但是慢查询时是客户端超时的一个可能因素。
redis 慢查询相关配置
1. slowlog-max-len
它决定了慢查询日志最多能保存多少条日志,slow log本身是一个内存中的FIFO队列,当队列大小超过slowlog-max-len时,最旧的一条日志将被删除,而最新的一条日志加入到slow log中。
- 默认值:128
- 支持动态配置
2. slowlog-log-slower-than
它决定要对执行时间大于多少微秒(microsecond , 1秒=1,000,000 微妙)的查询进行记录
- 默认值:10000
- slowlog-log-slower-than = 0 ,记录所有命令
- slowlog-log-slower-than < 0 , 不记录任何命令
- 支持动态配置
慢查询配置方法
1. 默认值
- config get slowlog-max-len = 128
- config get slowlog-log-slower-than = 10000
2. 修改配置文件重启
3. 动态配置
- config set slowlog-max-len 1000
- config set slowlog-log-slower-than 1000
慢查询相关命令
1. slowlog get [n]
含义:获取慢查询列表中的慢查询信息
2. slowlog len
含义:获取慢查询队列长度
slowlog reset
含义:清空慢查询队列
慢查询运维经验
- slowlog-max-len 不要设置过大,默认10ms,通常设置1ms
- 因为Redis的qps是万级别的,即每秒应能执行10000次请求
- 当一条命令执行1ms时,那每秒只能执行1000次请求
- slowlog-log-slower-than 不要设置地过小,通常设置1000左右
- 需要理解命令的生命周期
- 定期持久化慢查询
- 因为慢查询只存储于内存中,一宕机慢查询数据就会丢失
- 通过定期slowlog get将慢查询数据转存到MySQL或者ES中