我无法找出两个(三个?)类似的 percona 5.6 实例之间性能差异的原因。我使用 sysbench 准备了一些类似 tpcc 的基准测试,在 3 个类似的服务器中,一个服务器的结果好 30-40%。就基准测试而言,它使用 2GB 测试数据库,结果是重复的,以下是一些事实:
- 在基准测试期间,所有表都由操作系统缓存,iowait 平均为 1-2%
- 执行多次运行不会改变结果,无论是否重新创建数据库结构
- 重新启动 mysql/server 不会改变结果
- “显示变量”不显示服务器之间的任何差异
我已经没有主意了。所有服务器都是戴尔 R410,配备双 X5570、64G 相同内存配置和内存条(最近更换)和 860/870 EVO 500G SSD。启用 HT,操作系统 Ubuntu 18,Percona 5.6
如前所述,基准测试似乎是可以预测的(使用其他配置进行了多次测试) - 问题在于一个特定的场景 - 3 个类似的服务器,其中 2 个性能几乎相同,而第 3 个的结果好 30%。一个区别是,一台服务器(结果更高的那台)的磁盘控制器老旧、迟缓,缓存为 256MB - 但如果测试期间的 iowait 可以忽略不计,它怎么会有这样的影响呢?
值得一提的是,我已经接管了这些服务器,做了一些硬件升级,但并没有“从头开始”配置它们。
任何帮助均感激不尽。
编辑:附加信息:
基准测试主要依据: https://github.com/Percona-Lab/sysbench-tpcc
只需将其与自定义脚本一起打包即可简化传播 - 我正在使用单线程来更好地查看单核性能之间的差异。
为了便于书写,我们将 2 台性能较差的服务器称为“坏服务器”,将性能好 30% 的服务器称为“好服务器”。更多信息如下:
- 坏的服务器使用三星 EVO 870,好的服务器使用 860 EVO
- 所有服务器的平均负载约为 1.5
- 尝试禁用 HT - 没有影响
- 操作系统缓存的表文件由 ftools 的 fincore 检查 - 预热后,整个测试期间 iowait 下降到 0-2%
- 在 fiobenchmark 中,布置 8GB 测试文件,75/25 RW 测试,坏服务器的 IOPS 结果比好服务器好大约 400% - 我认为好服务器受到旧控制器的限制,而坏服务器仅使用直接 SATA。
但是,我的问题是,如果 iowait 可以忽略不计,为什么控制器缓存会有如此大的影响(如果有的话)?