我们正在考虑将一个包含 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 的这种方法
Aug 14, 2013
:https://dba.stackexchange.com/questions/48028/how-do-i-determine-how-much-data-is-being-written-per-day-through-insert-update/48139#48139Jun 25, 2013
:https://dba.stackexchange.com/questions/45224/postgres-write-performance-on-intel-s3700-ssd/45228#45228Jun 18, 2013
:https://dba.stackexchange.com/questions/44749/how-big-can-innodb-doublewrite-file-grow/44755#44755
在我看来,对于全 InnoDB 数据库,我会将符号链接的数量保持在最低限度。使用它们链接到文件夹或非常大的日志表。