[转帖]Redis故障检查:识别慢查询操作

redis,故障,检查,识别,查询,操作 · 浏览次数 : 0

小编点评

**使用SLOWLOG命令查看Redis中的慢查询操作** **步骤:** 1. **设置慢查询阈值:**使用`CONFIG SET slowlog-slower-than`命令设置慢查询的阈值,默认值为5毫秒。 2. **执行一些SET、HMSET命令:**测试前使用这些命令来执行一些简单的操作,然后使用SLOWLOG GET命令输出所有执行时间超过阈值的记录。 3. **识别慢查询:**如果在测试过程中发现一些查询操作很慢,可以使用SLOWLOG命令来识别慢查询。 **命令:** ``` CONFIG SET slowlog-slower-than 5000 SLOWLOG GET --slowlog-pattern "command_name>=5000" ``` **参数解释:** * `slowlog-slower-than`:设置慢查询的阈值,单位为毫秒。默认值为5毫秒。 * `--slowlog-pattern`:用于筛选慢查询日志记录的模式。默认值是`command_name>=5000`。这表示只记录命令执行时间超过5毫秒的操作。 **结果:** 执行上述命令后,将显示出所有执行时间超过5毫秒的操作的记录。这些记录将被记录在一个先进先出的队列中,并仅在 Redis 进程退出时进行持久化。 **注意:** * SLOWLOG命令仅记录命令执行时间,因此当识别没有慢查询时,可能无法确定客户端是否有超时问题。 * SLOWLOG记录的记录仅存在于内存中,不会持久化到磁盘上。

正文

https://weibo.com/ttarticle/p/show?id=2309404650615585505652

 

使用SLOWLOG命令查看Redis中的慢查询操作。

​​前几篇日志总结了下对Redis部署时的一些配置,Redis启动后,面对各种请求,数据持久化到硬盘,很可能会出现内存不足等故障问题,导致Redis速度变慢甚至崩溃。在Redis运行前我们可以做很多配置防止这些问题的出现,在Redis运行后,面对未知的突发情况,出现问题了,其实我们也可以用一些命令查看,发现它,例如使用SLOWLOG命令查看Redis中的慢查询操作。

 

运行状态信息

      Redis运行后,怎么查看它的运行状态来判断当前服务器发生了什么,有没有可能正在出现着某些问题,我们可以用INFO STATS、INFO peresistence等命令显示运行中Redis的一些状态信息:

      INFO STATS命令显示的状态数据,重点看黄色高亮的这些:

total_connection_received:表示服务器接收的总连接数,如果某一时间有大量的连接请求,可能会占满CPU。

instantaneous_ops_per_sec:表示Redis每秒处理的命令数。

rejected_connection:表示当Redis达到最大连接数后,再次收到连接请求时拒绝的连接数。

sync_full:表示当前主实例和从实例进行完全同步的次数。

sync_partial_ok:表示进行部分同步的次数。

sync_partial_error:表示部分同步未能完成的次数。

evicted_keys:表示当内存达到maxmemory,也就是内存不足时,淘汰的键的数量。

keyspace_misses:表示查找未命中的键的数量,如果发现Redis运行过程中这个值很高,那么表示程序出了一些问题。

latest_fork_usec:表示上一次fork操作消耗的时间。

 

持久化信息

      除了INFO STATS命令外,还可以用INFO persistence命令,查看Redis持久化信息,包括RDB和AOF两种,这些信息很重要,如果磁盘满了,Redis持久化就会失败,一些重要的数据可能会丢失:

例如一些信息如下:

loading:标识服务器是否正在加载持久化文件

rdb_changes_since_last_save:表示最近一次成功生成rdb文件时写入的命令个数。

rdb_bgsave_in_progress:表示服务器是否正在创建rdb文件。

rdb_last_save_time:表示最近一次成功生成rdb文件的时间戳。

rdb_last_bgsave_status:标识最近一次rdb持久化是否成功。

rdb_last_bgsave_time_sec:表示最近一次成功生成rdb文件消耗的时间。

rdb_current_bgsave_time_sec:表示当前服务器正在创建rdb文件的操作已经消耗的时间

rdb_last_cow_size:表示RDB过程中父进程与子进程比较执行了多少修改操作。

 

识别慢查询

   如果在Redis执行过程中,出现某些查询操作很慢才能完成,我们可以使用SLOWLOG命令来识别,看看是查询操作问题,还是CPU等其他问题。识别慢查询的实现就是记录某条命令的执行时间是否超过了设定的阈值,一条客户端命令经历从发送到等待执行,到执行命令最后返回结果四个阶段,要注意的是Redis慢查询识别记录的只是命令执行消耗的时间,所以当SLOWLOG命令识别没有慢查询时,不代表客户端没有超时问题,因为还有发送命令阶段,如果遇到网络阻塞,那么超时问题还是会出现。下面来看下SLOWLOG命令的具体使用。

      测试前首先用CONFIG SET slowlog-slower-than命令来设置这个慢查询的阈值,单位为微秒,所以我们可以先设成5,一个非常小的值,然后执行一些简单的SET、HMSET命令,最后使用SLOWLOG GET命令,输出得到所有执行时间超过5微秒的操作:

      这些操作设定阈值的操作都会被记录一个先进先出的队列中,这个队列最多可以容纳多少条操作记录取决于slowlog-max-len参数,这些记录只会存在于内存中,不会持久化到磁盘上,所以操作SLOWLOG识别慢查询时,执行速度很快。除此之外,使用SLOWLOG LEN命令来获取记录慢操作日志中的记录的数量,如上图可以看到,有两条消耗时间超过设定阈值的慢操作被记录在了日志中,想要清除慢操作记录使用的命令是SLOWLOG RESET。

与[转帖]Redis故障检查:识别慢查询操作相似的内容:

[转帖]Redis故障检查:识别慢查询操作

https://weibo.com/ttarticle/p/show?id=2309404650615585505652 使用SLOWLOG命令查看Redis中的慢查询操作。 ​​前几篇日志总结了下对Redis部署时的一些配置,Redis启动后,面对各种请求,数据持久化到硬盘,很可能会出现内存不足等

[转帖]Redis cluster故障复盘,预案、工具、判断一样都不能少!

http://blog.itpub.net/31545813/viewspace-2924677/ 背景 最近从ELK日志分析发现: 有很多应用连接redis 超时; 监控平台出现”redis 集群不健康“告警; 结合之前的经验,我们一般的应处理手段为:重启连接redis超时的应用,原因有以下两点:

[转帖]抛砖系列之redis监控命令

处理一下.. 前言 redis是一款非常流行的kv数据库,以高性能著称,其高吞吐、低延迟等特性让广大开发者趋之若鹜,每每看到别人发出的redis故障报告都让我产生一种居安思危,以史为鉴的危机感,恰逢今年十一西安烟雨不断,抽时间学习了几个redis监控命令,和大家分享一波。 redis-cli --s

[转帖]OpenAI 道歉:Redis bug 致 ChatGPT 故障、数据泄露

https://www.163.com/dy/article/I0N6HEIT0511D6RL.html OpenAI表示,Redis的开源库bug导致了发生在周一的ChatGPT故障和数据泄露事件,当时一些用户可以看到其他用户的个人信息和聊天查询内容。 ChatGPT在侧边栏中显示了用户执行的以往

[转帖]redis-cluster-proxy安装使用尝试

https://www.cnblogs.com/gered/p/15210509.html 【1】gcc 4.9+安装 【2】redis-cluster-proxy 介绍与安装 下载安装: 配置文件: 启动 【3】连接核验 【4】故障转移 【4.0】查看集群状态 【4.1】集群挂一个主库的影响 【4

[转帖]当Redis数据磁盘坏掉之后会发生什么

https://www.zeekling.cn/articles/2020/11/09/1604937462651.html 问题简介 当Redis cluster集群数据所在磁盘的RAID卡坏掉了之后会发生什么?集群会不会进行故障迁移,以及怎么快速恢复。 问题1:cluster集群会进行故障迁移嘛

[转帖]Redis各种命令时间复杂度一览表

String类型 命令时间复杂度set0(1)get0(1)del0(k),k是键的个数mset0(k),k是键的个数mget0(k),k是键的个数incr0(1)decr0(1)incryby0(1)decryby0(1)incrybyfloat0(1)append0(1)strlen0(1)se

[转帖]Redis Info 命令

https://www.runoob.com/redis/server-info.html Redis Info 命令以一种易于理解和阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。 通过给定可选的参数 section ,可以让命令只返回某一部分的信息: server : 一般 Red

[转帖]Redis 性能优化的 13 条军规!史上最全

https://zhuanlan.zhihu.com/p/118532234 Redis性能优化实战方案 Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww