Redis变慢的五大原因以及排查方法

Redis变慢的五大原因以及排查方法

一、 慢操作五大原因

如下图所示,主要分为与操作系统相关以及与Redis集群实例之间与内部相关两个方面

1. Redis实例之间以及内部数据传输阻塞(客户端、磁盘、主从通信、切片集群通信)

解决方法 — 主从集群时,限制主库RDB文件大小。

2. 多CPU多核架构(绑核,绑CPU)

解决方法—绑核绑CPU。

3. sql语句执行阻塞(慢查询、过期key)

解决方法—避免慢查询指令、客户端做聚合、对key设置不同的过期时间、使用异步线程删除bigkey。

4. AOF文件系统,RDB大内存页(AOF持久化阻塞、大内存页)

解决方法—AOF级别调整,使用高速硬盘、关闭大内存页机制。

5. 操作系统Swap操作(内存磁盘数据转换、内存清理)

解决方法—增加机器内存、使用Redis集群、调整内存清理机制触发参数。

二、实际中Redis变慢的可能情况

使用复杂度过高的命令或一次查询全量数据;操作 bigkey;大量 key 集中过期;Redis所用内存达到分配给Redis的 maxmemory;客户端使用短连接和 Redis 相连;当Redis 实例的数据量大时,无论是生成 RDB,还是 AOF 重写,都会导致 fork 耗时严重;AOF 的写回策略为 always,导致每个操作都要同步刷回磁盘;Redis 实例运行机器的内存不足,导致 swap 发生,Redis 需要到 swap 分区读取数据;进程绑定CPU,绑核 不合理;Redis 实例运行机器上开启了透明内存大页机制;网卡压力过大。(网络IO压力大)。

三、慢操作排查方法

查看慢查询日志指令: slowlog get(会显示超过预先设定阈值的一些指令,慢日志底层是队列有大小限制,满了会删除队列中最早的记录);使用–bigkeys -i 0.1指令:查找每种数据类型中最大的bigkey,需要扫描全库,会阻塞主线程,所以最好放到从库统计,或者用-i指令不连续执行统计操作。

参考文章:

https://time.geekbang.org/column/article/292285

相关推荐

EXCEL转换器
365登录平台

EXCEL转换器

⌛ 07-15 👁️ 1686
英雄无敌战争纪元全阵营兵团详细介绍
亚洲365bet比分

英雄无敌战争纪元全阵营兵团详细介绍

⌛ 07-12 👁️ 6681