pika icon indicating copy to clipboard operation
pika copied to clipboard

IO util 一直都是100%

Open Gjj455 opened this issue 3 years ago • 13 comments

集群采用codis+pika 机器配置:内存256GB 磁盘NVME 7T 数据量单副本 2T左右 QPS 2w左右 一台机器8个pika实例,1024/2=512个slot iostat image iotop image

请问为啥读的IOPS这么高,pika 到底在干啥?

Gjj455 avatar May 16 '22 01:05 Gjj455

出现这个问题的原因是由于设置的slot数目太多,每个slot都会创建memtable。但由于rocksdb中memtable内存总量的限制导致频繁刷盘。建议减少slot数目。例如8个slot。

kernelai avatar May 16 '22 02:05 kernelai

codis 就是1024个slot. 我们用了两组机器 一组机器 就是512 个slot 每台机器起了8个实例 每个实例大概64个slot. 请问你是说减少slot 的意思是 一台机器总的slot减少还是每个实例的slot减少 然后多起几个实例?

出现这个问题的原因是由于设置的slot数目太多,每个slot都会创建memtable。但由于rocksdb中memtable内存总量的限制导致频繁刷盘。建议减少slot数目。例如8个slot。

Gjj455 avatar May 16 '22 03:05 Gjj455

memtable 不是跟写有关系吗?跟读也有关系吗?

Gjj455 avatar May 16 '22 07:05 Gjj455

codis中1024个slot,是这个变量设置的 const MaxSlotNum = 1024 修改下这个参数重新编译。例如你目前使用的是8个group,考虑到未来的扩展,可以把这个值设为16.

kernelai avatar May 16 '22 08:05 kernelai

memtable 不是跟写有关系吗?跟读也有关系吗?

compaction过程会产生读操作。

kernelai avatar May 16 '22 08:05 kernelai

codis中1024个slot,是这个变量设置的 const MaxSlotNum = 1024 修改下这个参数重新编译。例如你目前使用的是8个group,考虑到未来的扩展,可以把这个值设为16.

如果不改变[const MaxSlotNum = 1024] 。还是用1024 现在设置的16group 2组机器,一主一从 共4台 一组机器8group. 即使设置更多的group. 也是部署在这2组机器 。对一台机器来说slot数量就这么多(512) 。我感觉你的意思是 最好部署在多台机器上吧?我是想在现有资源的基础上去优化。

Gjj455 avatar May 16 '22 08:05 Gjj455

主要是codis中的slot总个数,需要pika也要创建这么多总数slot来对应。只能通过减少const MaxSlotNum,减少总的slot数目。进而减少memtable。

kernelai avatar May 16 '22 09:05 kernelai

一台物理机512个slot是非常多的。实际对应这台物理机上会创建512*5个rocksd实例。

kernelai avatar May 16 '22 09:05 kernelai

是的。感谢解答 。还有个小小的问题,一台物理机设置多少个rocksd实例,也就是分配多少slot 比较合适 ,这个由什么决定?

Gjj455 avatar May 16 '22 09:05 Gjj455

从资源利用的角度来说,尽可能少的slot的数目是合适的。但需要考虑未来扩展,可以double放宽。例如你如果有8台物理机,每台一块物理磁盘。那么8个slot,分配到8个group就可以充分利用物理资源。考虑到未来的扩容,那么可以实际设置为16个slot。

kernelai avatar May 16 '22 09:05 kernelai

是的。感谢解答 。还有个小小的问题,一台物理机设置多少个rocksd实例,也就是分配多少slot 比较合适 ,这个由什么决定?

集群采用codis+pika 机器配置:内存256GB 磁盘NVME 7T 数据量单副本 2T左右 QPS 2w左右 一台机器8个pika实例,1024/2=512个slot iostat image iotop image

请问为啥读的IOPS这么高,pika 到底在干啥?

你好,请问问题解决了吗?

Braveheart7854 avatar Jun 20 '22 10:06 Braveheart7854

是的。感谢解答 。还有个小小的问题,一台物理机设置多少个rocksd实例,也就是分配多少slot 比较合适 ,这个由什么决定?

集群采用codis+pika 机器配置:内存256GB 磁盘NVME 7T 数据量单副本 2T左右 QPS 2w左右 一台机器8个pika实例,1024/2=512个slot iostat image iotop image 请问为啥读的IOPS这么高,pika 到底在干啥?

你好,请问问题解决了吗?

问题解决了 ,我这边的问题主要是 codis-dashboard(我们的开发 改了原版的codis 加了一些功能) 里加了一分钟刷一次key的功能, 才导致这么高的读IO ,后来改了代码,去掉这个功能。IO就降了

Gjj455 avatar Jun 20 '22 10:06 Gjj455

是的。感谢解答 。还有个小小的问题,一台物理机设置多少个rocksd实例,也就是分配多少slot 比较合适 ,这个由什么决定?

集群采用codis+pika 机器配置:内存256GB 磁盘NVME 7T 数据量单副本 2T左右 QPS 2w左右 一台机器8个pika实例,1024/2=512个slot iostat image iotop image 请问为啥读的IOPS这么高,pika 到底在干啥?

你好,请问问题解决了吗?

问题解决了 ,我这边的问题主要是 codis-dashboard(我们的开发 改了原版的codis 加了一些功能) 里加了一分钟刷一次key的功能, 才导致这么高的读IO ,后来改了代码,去掉这个功能。IO就降了

感谢反馈

kernelai avatar Jun 20 '22 10:06 kernelai