我在服务器中遇到了性能问题,该服务器在 RAID1 配置中有两个相同的 SSD,IO 速度很慢。通过使用“atop”,我发现磁盘使用率不均匀:
DD | md2 | busy 0% | read 0 | write 1717 | MBr/s 0.00 | MBw/s 0.58 | avio 0.00 ms |
DSK | sdb | busy 99% | read 0 | write 842 | MBr/s 0.00 | MBw/s 0.58 | avio 11.8 ms |
DSK | sda | busy 11% | read 0 | write 1058 | MBr/s 0.00 | MBw/s 0.58 | avio 1.01 ms
问题是这是什么原因造成的?为什么 sdb 使用率要高得多?我已经注意到几台服务器上都存在同样的问题,所以所有服务器上的 sdb 都存在故障的可能性很小。此外,使用 hdparm 检查了磁盘信息以确保它们相同。此外,这种情况只发生在运行生产 MySQL 服务器的服务器上。我试图通过简单地从分区写入和读取来重现此问题,但我无法通过这种方式重现相同的结果。感谢您的建议。
[root@CentOS-67-64-minimal ~]# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb3[1] sda3[0]
232753344 blocks super 1.0 [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
524224 blocks super 1.0 [2/2] [UU]
md0 : active raid1 sdb1[1] sda1[0]
16777088 blocks super 1.0 [2/2] [UU]
unused devices: <none>
[root@CentOS-67-64-minimal ~]# hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 28484 MB in 2.00 seconds = 14263.62 MB/sec
Timing buffered disk reads: 1096 MB in 3.00 seconds = 365.15 MB/sec
[root@CentOS-67-64-minimal ~]# hdparm -tT /dev/sdb
/dev/sdb:
Timing cached reads: 21656 MB in 2.00 seconds = 10841.67 MB/sec
Timing buffered disk reads: 14 MB in 3.95 seconds = 3.54 MB/sec
[root@CentOS-67-64-minimal ~]# iostat -x 1
Linux 2.6.32-573.3.1.el6.x86_64 (CentOS-67-64-minimal) 2015.11.20 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
8,96 0,13 4,22 3,93 0,00 82,75
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sdb 0,06 383,28 0,22 164,10 20,26 4275,72 26,15 2,26 13,76 3,21 52,79
sda 2,01 329,12 1,50 218,25 168,39 4275,72 20,22 0,17 0,77 0,35 7,71
md0 0,00 0,00 0,00 0,00 0,01 0,00 8,00 0,00 0,00 0,00 0,00
md1 0,00 0,00 0,00 0,00 0,01 0,00 7,62 0,00 0,00 0,00 0,00
md2 0,00 0,00 1,75 546,03 172,42 4274,38 8,12 0,00 0,00 0,00 0,00
MadHatter 编辑:
这是我iostat
在非常轻的负载下的输出;请注意 sdb 主轴上的 %util(您可以通过提示中的不同主机名区分我的输出和 Nerijus 的输出,并且我会将我的编辑保留在(上面)行以下):
[me@lory ~]$ iostat -x 1
[...]
avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 0.50 0.00 0.00 99.25
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sdb 0.00 0.00 0.00 4.00 0.00 20.00 5.00 1.00 272.50 250.00 100.00
sda 0.00 0.00 0.00 4.00 0.00 20.00 5.00 0.07 17.75 17.75 7.10
md1 0.00 0.00 0.00 5.00 0.00 40.00 8.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 4.00 0.00 32.00 8.00 2.51 272.50 250.00 100.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
md0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
这是我的hdparm
输出:
[me@lory ~]$ sudo hdparm -tT /dev/sda
One-time password (OATH) for `me':
/dev/sda:
Timing cached reads: 1730 MB in 2.00 seconds = 864.60 MB/sec
Timing buffered disk reads: 436 MB in 3.00 seconds = 145.12 MB/sec
[me@lory ~]$ sudo hdparm -tT /dev/sdb
/dev/sdb:
Timing cached reads: 1580 MB in 2.00 seconds = 789.63 MB/sec
Timing buffered disk reads: 14 MB in 8.43 seconds = 1.66 MB/sec
我还可以确认我的/proc/mdstat
指示没有重新同步,并且停止mysqld
并不能使问题消失。
答案1
我认为可能的原因有:
- 由于磁盘(+ 可能是控制器)缓存,它们永远不会以相同的方式工作
- 不同的固件
- 如果不在所有级别上使用 TRIM,SSD 速度会降低,因为从控制器(磁盘内部)的角度来看,磁盘会已满,然后 SSD 磁盘会变慢。基准测试显示,通常磁盘速度也取决于其使用情况。
- 与上一个相关 - 分配地方很重要,它是不是 SSD,一些/大多数 SSD 具有类似 RAID 的结构,因此最大速度取决于你在哪里写入数据
- 磁盘到总线的硬件不同(包括电缆、链路速度、控制器等)
- 磁盘的操作系统块缓存 - 可能内存不足以平衡两个磁盘的缓存......
hdparm -tT
无论如何都不会给你真正的结果,它是缓冲的并且并不总是像我们期望的那样透明,它不一定暴露磁盘内部的工作方式,特别是在 2 秒内。
或许,他们都很好。
答案2
我们发现您的 SBD 状态不佳,这就是我的答案。请看一看,您需要获取这样的值(在 3 台不同的高 I/O 生产服务器上进行了测试)
1-Timing buffered disk reads: 560 MB in 3.00 seconds = 186.43 MB/sec
2-Timing buffered disk reads: 276 MB in 3.09 seconds = 89.23 MB/sec
3-Timing buffered disk reads: 326 MB in 3.00 seconds = 108.66 MB/sec
5-Timing buffered disk reads: 528 MB in 3.00 seconds = 175.97 MB/sec
6-Timing buffered disk reads: 528 MB in 3.00 seconds = 175.94 MB/sec
所以你的 1.66 MB 到目前为止.. 然后导致你的系统过载。希望它有所帮助!