Chaos mesh的读负载和写负载如何影响数据库的性能

如何影响数据库的性能,例如:mysql的

请完整描述一下你的问题~

情况是这样:我想通过chaos mesh 来制造一个影响mysql数据库的故障,发现读负载和写负载,是最有可能影响mysql数据库的异常,但是遭了读负载和写负载的异常后,却发现无法达到想要的效果,所以想咨询一下,是不是我设置的哪里不对,我没有设置路径,且线程数设置的100,数据量设置的1000GB?或者有其他的什么方式来影响数据库的性能?

你看下这个干货对你来说有没有什么帮助~

我这是chaosd上的问题,这块大部分是k8s的,我还看了chaosd的文档,感觉里面讲的有点简单了

描述下具体问题,比如敲了什么命令,预期是什么,结果是什么

我想通过chaos mesh 来制造一个影响mysql数据库的故障,发现读负载和写负载,是最有可能影响mysql数据库的异常,但是造了读负载和写负载的异常后,却发现无法达到想要的效果【效果:能够在页面感受到页面加载缓慢,或者查询速度缓慢】,所以想咨询一下,是不是我设置的哪里不对,我没有设置路径,且线程数设置的100,数据量设置的1000GB?或者有其他的什么方式来影响数据库的性能?

你的问题太抽象无法回答。

这里是 chaosd 的 doc https://chaos-mesh.org/docs/chaosd-overview/ , 里面有具体场景,你可以说下是哪个场景用了哪条命令,结果是什么,预期又是什么。

用了 chaosd attack disk add-payload read -s 1000G -n 7 -p /data/zero ,这个命令,想要效果:影响mysql 的读取性能,能够在页面操作时,明显感觉到页面加载缓慢的效果

-p, --path string ‘path’ specifies the location to read data.If path not provided, payload will read from disk mount on “/”

你的 mysql 装在 /data/zero 么

首先mysql的读取一般都是在内存中的,发生物理读的情况比较低。然后你想达到页面卡顿的效果,我觉得用读写负载是不太容易测出来的。因为你一个页面信息的加载能有多少读负载呢?
其次你得知道你盘的读写速度,mysql当前配置满载的读写速度,chaos mesh能够造成的负载速度。假设磁盘写入速度500MB/s,mysql写入满载时是200MB/s,你chaos mesh 造成的负载是300MB/s及以上才能看到mysql有写入性能下降的表现。

不是,我是举例这个路径,因为我在测试的时候发现,这个路径只能填写具体文件的路径,不能填写文件夹,这个也是我的疑问之一,我应该怎么填写这个路径?

确认了下,有两点需要明确:

  1. 目前 kubernetes 版 chaos 支持 disk latency 注入,参考 https://chaos-mesh.org/docs/simulate-io-chaos-on-kubernetes/ , 而物理机版 chaosd 并不支持注入 disk latency
  2. chaosd attack disk add-payload 的实现方式本质是 dd 命令,参考 https://github.com/chaos-mesh/chaosd/blob/v1.4.0/pkg/core/disk.go#L51 , read 用的是 iflag=dsync,fullblock,nocache ,参考 https://github.com/chaos-mesh/chaosd/blob/v1.4.0/pkg/core/disk.go#L172-L182

因此,chaosd 可能无法满足你的需求。

同上, chaosd attack disk add-payload 底层直接用的 dd 命令,因此参数需要是具体文件,而不能是文件夹

嗯,我是评估最有可能的是读写负载,这个故障不可以的话,这块chaos mesh 其他的故障,有能影响到mysql性能的么?

要么用 chaosd 模拟 cpu 内存之类的,用的是 stress,你也可以直接用 stress 来模拟,没啥区别。
或者另外找其他工具来模拟磁盘延迟或吞吐上限,chaosd 的功能有限,物理机上可用的工具多。

嗯,如果是这样的话,那就从几方面来说都是不支持的

这块cpu和内存飙升,好像也不能直接影响mysql的性能,我从服务器上看,cpu已经飙满了,但是页面点击刷新什么的,还差不多。冒昧的问一下,TiDB这块有专门来测试机器影响性能,然后考验TiDB的健壮性的测试么?

cpu跟内存的满载都是会影响性能的。只不过你需要的场景是让页面卡顿,对于数据库来说页面刷新需要的资源很少,所以反馈不会很明显。你可以用网络的异常来测试页面卡顿的效果,但是这个就跟数据库无关了。。

内部测试使用 kubernetes 版本, chaosd 可能模拟网络类,页面卡顿数据库层面最简单的方式比如模拟业务锁?