前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 哪些地方需要调整 杂谈

Redis 哪些地方需要调整 杂谈

作者头像
AustinDatabases
发布2020-10-30 10:37:54
3510
发布2020-10-30 10:37:54
举报

如果有人问redis 到底跑的有多快,简单的回答,纳秒等级, 可如果再要细问,估计只能进行测试了,每台机器的物理硬件标准不同,所以就需要基准测试. 另外redis到底需要不需要进行调优,可能大部分场景不需要,但不需要不意味这你可以欣然接受你不会.

redis 本身提供了一个测试程序 redis-benchmark, 通过benchmark 来对当前的机器能处理的redis任务有一个大致的评估.

下面可以看到100万的request 在各种方面处理的速度, ping_bulk 需要16.09秒完成相关的100万的操作, 这里需要指出操作的单次的数据流是3byte.

其中评测时需要有一些指标

1 -c 参数 默认是50个client 但实际上需要根据具体的client 来进行测试例如 100个客户端

2 -d 每次操作的byte的数字是多少

在得出redis 在评估标准下的标准值后. 就可以查看自己的 reids的机器和相关的配置是否正确.

Redis的延迟定义也是由客户端发送命令到客户端接收命令的时间,这里使用slow log 的方式来进行.

通过添加

slowlog-log-slower-than

slowlog-max-len

两个参数来设置多长时间的redis 语句会被记录, 默认是slowlog-log-slower-than 10000 slowlog-max-len 为存储多少慢语句后会rotate.

这是对于reids慢查询的相关设置

由于REDIS 的处理的速度较快,所以网络的延迟也会被提上议程,redis 提供了 latency --latency-history --intrinsic-latency 30 三种方式, 其中常用的给定一段时间来进行延迟的探测,通过 intrinsic-latency 来对当前的客户端和系统之间的网络的延迟进行探测.

这样的测试主要的意义在于,保证在REDIS延迟中, 在客户或应用端提出延迟后,的分析中, 在慢语句之间的数字无法对应后,对网络进行分析看是否由于网络造成的问题导致延迟.

下面就是一些在安装中注意的点

1 系统中的透明大页在reids中禁用

echo never > /sys/kernel/mm/transparent_hugepage/enabled

在redis中或者说大多数数据库中都建议关闭 THP, 包括ORALCE都有一片相关的文字提出ORACLE LINUX 和 LINUX 对于ORACLE 数据库中性能提升的原因之一是他们关掉了 THP, THP产生的原因主要和内存能提供的大容量数量和CPU 能进行CACHE 的内存寻址的数量有关, 如果要硬件上来提高是很难南的,所以LINUX 系统中制造出一个THP, 由于在分配内存的时候可以分配页面的时候超过4KB的标准值,而分配更大的内存来共应用使用, 但对数据库来说就不大适合使用THP的方式来管理内存,在内存中处理数据都是以数据页来体现的,每种数据库都有自己的页面设置,另外在使用THP中包括kswapd、碎片整理和kcompactd这些都负责在虚拟内存中为未来的THP腾出空间,等等都会造成系统的性能的损耗和一些意外的BUG. 所以大部分数据库都建议关闭.

ORACEL 相关的文字

https://blogs.oracle.com/linux/performance-issues-with-transparent-huge-pages-thp

2 tcp-backlog

在应用与redis连接时,需要使用LISTEN系统调用将套接字放入LISTEN状态时,它需要为该套接字指定一个backlog, 在高并发时是否拥有足够了backlog就是一个问题.

sudo echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf

sudo echo "net.ipv4.tcp_max_syn_backlog = 8192" >> /etc/sysctl.conf

sudo echo "net.core.rmem_max = 16777216" >> /etc/sysctl.conf

sudo echo "net.core.wmem_max = 16777216" >> /etc/sysctl.conf

sudo sysctl -p

如果套接字正在监听并处于繁忙状态,那么连接积压将会堆积起来。在发生故障之前,内核将把挂起的连接保存在缓冲区中, 调整缓冲的原因也是如此,虽然说根本不会用到那么多的内存.

3 在大多数的系统中此参数设置为 0 ,适应大多数应用系统, 而在redis 中需要将内存虚拟分配的配置调整为1

echo "vm.overcommit_memory=1" >> /etc/sysctl.conf

4 对于SWAP的设置,有些公司将REIDS的SWAP设置为不加载,也就是根本就没有SWAP ,给出的理由是REDIS 为缓存式数据库,不需要SWAP 下面是REDIS 官方的一句话, 请确保你的系统设置了swap, 关键问题和其他数据库要设置SWAP可能有一样的原因,就是在突破内存后,到底要不要REDIS OOM, 显然官方是不希望被OOM KILL REDIS process的.

5 在redis 中设置 maxmemory 的意义是在REDIS 使用系统的内存的限制当中如果达到maxmemory的限制的话,redis 会停止继续写入的工作,提供只读的工作,并给出一个错误写的指令, 而不是失败的信息.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档