将数据库移动到另一个驱动器符号链接会对性能造成影响吗?

将数据库移动到另一个驱动器符号链接会对性能造成影响吗?

我们正在考虑将一个包含 InnoDB 表的数据库(总共有 4 个)移动到 Ubuntu 14.04 VPS 中的单独分区。此数据库的读/写操作非常密集(每秒 500 次写入,大约 1000 次读取)。

主要考虑因素是另一个驱动器有更多空间。我们使用MySQL 指南使用符号链接实现这一点。

使用符号链接会对性能产生影响吗?

答案1

不,符号链接对性能的影响几乎不存在。下面是一些 strace 来展示这一点。

jaba@jaba-ubuntu:~$ echo foo >test
jaba@jaba-ubuntu:~$ ln -s test testlink
jaba@jaba-ubuntu:~$ ls -lah test testlink
-rw-rw-r-- 1 jaba jaba 4 heinä  7 14:39 test
lrwxrwxrwx 1 jaba jaba 4 heinä  7 14:39 testlink -> test
jaba@jaba-ubuntu:~$ strace -fFtT cat testlink
<some strace output omitted>
14:39:35 open("testlink", O_RDONLY|O_LARGEFILE) = 3 <0.000042>
14:39:35 fstat64(3, {st_mode=S_IFREG|0664, st_size=4, ...}) = 0 <0.000032>
14:39:35 fadvise64_64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0 <0.000033>
14:39:35 read(3, "foo\n", 65536)        = 4 <0.000056>
14:39:35 write(1, "foo\n", 4foo
)           = 4 <0.000048>
14:39:35 read(3, "", 65536)             = 0 <0.000033>
14:39:35 close(3)                       = 0 <0.000036>
14:39:35 close(1)                       = 0 <0.000032>
14:39:35 close(2)                       = 0 <0.000031>

如果符号链接可能导致严重瓶颈,则您的 I/O 非常繁重。繁重程度就如同“世界上没有存储系统可以承受这种工作负载”。

答案2

就性能而言,使用符号链接本身并没有实际影响。性能只会根据符号链接指向的磁盘而提高或降低。如果您将整个数据目录移动到符号链接的目标,情况确实如此。

如果您想提高性能,您可能需要混合方法。

根据Facebook MySQL 工程师的博客,您应该拆分 MySQL 文件,以便一个磁盘包含所有接收顺序写入的 MySQL 文件,另一个磁盘包含接收随机写入的 MySQL 文件。

我之前曾讨论过 MySQL 和 PostgreSQL 的这种方法

在我看来,对于全 InnoDB 数据库,我会将符号链接的数量保持在最低限度。使用它们链接到文件夹或非常大的日志表。

相关内容