![SSD 与内部 SATA 连接时速度极慢,与外部 USB 连接时速度正常](https://linux22.com/image/1132757/SSD%20%E4%B8%8E%E5%86%85%E9%83%A8%20SATA%20%E8%BF%9E%E6%8E%A5%E6%97%B6%E9%80%9F%E5%BA%A6%E6%9E%81%E6%85%A2%EF%BC%8C%E4%B8%8E%E5%A4%96%E9%83%A8%20USB%20%E8%BF%9E%E6%8E%A5%E6%97%B6%E9%80%9F%E5%BA%A6%E6%AD%A3%E5%B8%B8.png)
我有一台全新的笔记本电脑(华硕 N551VW,i7-6700HQ,16 GB 内存)上我安装了 Ubuntu 14.04 64 位和一个新的三星 SSD 850 PRO 512GB(最新固件)。我安装了默认MySql 5.6.27在机器上,但我注意到数据库的性能非常非常慢(仅仅创建一个数据库并执行一些没有任何数据的迁移就需要大约 33 秒,而在硬件较低的同事笔记本电脑上则需要大约 3 秒)。每个 sql 语句似乎大部分时间都处于“系统锁定”状态,正如我使用 SHOW PROCESSLIST 看到的那样。
我以为是硬盘问题,但在 Ubuntu 中执行硬盘基准测试,读取速度为 500 Mb/s,写入速度为 350 Mb/s,这看起来很正常。
我也尝试更新到新的 4.2 内核,但问题仍然存在。为了进行实验,我在普通硬盘上克隆了 ssd,将其切换并用 usb 盒将 SSD 外部连接。我将 mysql 数据目录移动到外部磁盘,然后重试创建数据库:仅用了 2.5 秒!
只是出于好奇,我尝试在内部非 SSD 磁盘上执行相同的操作:当使用 SATA 将硬盘插入笔记本电脑内部时,创建数据库需要 2 分钟以上,而使用外部 USB 上的数据目录(使用相同的物理磁盘)则只需不到 10 秒!
我对此真的一无所知。所有测试都是在相同条件下进行的(机器负载为 0,ext4 文件系统等)。似乎 I/O 链(SATA 控制器?)存在一些问题,但我不知道如何测试。
这是有关磁盘和控制器的 lshw 信息:
*-storage
description: SATA controller
product: Intel Corporation
vendor: Intel Corporation
physical id: 17
bus info: pci@0000:00:17.0
version: 31
width: 32 bits
clock: 66MHz
capabilities: storage msi pm ahci_1.0 bus_master cap_list
configuration: driver=ahci latency=0
resources: irq:127 memory:df330000-df331fff memory:df334000-df3340ff ioport:f090(size=8) ioport:f080(size=4) ioport:f060(size=32) memory:df333000-df3337ff
*-scsi:0
physical id: 1
logical name: scsi0
capabilities: emulated
*-disk
description: ATA Disk
product: Samsung SSD 850
physical id: 0.0.0
bus info: scsi@0:0.0.0
logical name: /dev/sda
version: 2B6Q
serial: S250NXAGB34907Y
size: 476GiB (512GB)
capabilities: gpt-1.00 partitioned partitioned:gpt
configuration: ansiversion=5 guid=02c7beb5-f100-4252-8534-a8f6f692692d sectorsize=512
*-volume:4
description: EXT4 volume
vendor: Linux
physical id: 5
bus info: scsi@0:0.0.0,5
logical name: /dev/sda5
logical name: /
logical name: /var/lib/docker/aufs
version: 1.0
serial: 5231fd09-180d-4fd2-bad5-e989207b11e7
size: 88GiB
capabilities: journaled extended_attributes large_files huge_files dir_nlink recover extents ext4 ext2 initialized
configuration: created=2016-01-06 12:55:27 filesystem=ext4 lastmountpoint=/ modified=2016-01-24 23:37:05 mount.fstype=ext4 mount.options=rw,noatime,errors=remount-ro,data=ordered mounted=2016-01-24 23:37:05 state=mounted
lspci:
00:00.0 Host bridge: Intel Corporation Device 1910 (rev 07)
00:01.0 PCI bridge: Intel Corporation Device 1901 (rev 07)
00:02.0 VGA compatible controller: Intel Corporation Device 191b (rev 06)
00:04.0 Signal processing controller: Intel Corporation Device 1903 (rev 07)
00:14.0 USB controller: Intel Corporation Device a12f (rev 31)
00:14.2 Signal processing controller: Intel Corporation Device a131 (rev 31)
00:15.0 Signal processing controller: Intel Corporation Device a160 (rev 31)
00:15.1 Signal processing controller: Intel Corporation Device a161 (rev 31)
00:16.0 Communication controller: Intel Corporation Device a13a (rev 31)
00:17.0 SATA controller: Intel Corporation Device a103 (rev 31)
00:1c.0 PCI bridge: Intel Corporation Device a112 (rev f1)
00:1c.3 PCI bridge: Intel Corporation Device a113 (rev f1)
00:1f.0 ISA bridge: Intel Corporation Device a14e (rev 31)
00:1f.2 Memory controller: Intel Corporation Device a121 (rev 31)
00:1f.3 Audio device: Intel Corporation Device a170 (rev 31)
00:1f.4 SMBus: Intel Corporation Device a123 (rev 31)
01:00.0 3D controller: NVIDIA Corporation Device 139b (rev a2)
02:00.0 Network controller: Intel Corporation Wireless 7265 (rev 59)
03:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. Device 5287 (rev 01)
03:00.1 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 12)
我也尝试了不同的调度程序(deadline、noop),但没有结果:(
如果有人能帮忙我会非常感激!
提前谢谢!
答案1
在搜索了上千个论坛和其他内容后,我尝试了屏障=0选项添加到根 ext4 文件系统。
结果:从 33 秒缩短至 1.5 秒对于常用的脚本。
我不知道这样的选项如何能如此戏剧性地改变事情。我不知道这是否是我遇到的问题的正确解决方案,但至少现在笔记本电脑不再是一个非常昂贵的镇纸。如果有人能想到另一种解决方案,而不需要使用某种有风险的选项,如 barrier=0,我会非常高兴!