Назад | Перейти на главную страницу

Падение производительности при переносе БД на символическую ссылку на другой диск?

Мы рассматриваем возможность переноса одной базы данных (всего их 4) с таблицами InnoDB в отдельный раздел в Ubuntu 14.04 VPS. Эта БД получает интенсивное чтение / запись (500 операций записи в секунду, около 1000 операций чтения).

Главное соображение заключается в том, что на другом диске гораздо больше места. Мы используем Руководство по MySQL для этого используйте символическую ссылку.

Есть ли снижение производительности при использовании символической ссылки?

Нет, снижение производительности от символической ссылки практически отсутствует. Вот несколько примеров, чтобы это показать.

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>

Если вы дойдете до точки, когда символические ссылки могут стать серьезным узким местом, тогда ваш ввод-вывод будет ОЧЕНЬ тяжелым. Тяжелые, как "ни одна система хранения в мире не выдержит такой нагрузки".

Когда дело доходит до производительности, использование самой символической ссылки не оказывает реального влияния. Производительность будет улучшаться или ухудшаться только в зависимости от диска, на который указывает символическая ссылка. Это верно, если вы переместите весь каталог данных в цель символической ссылки.

Если вы хотите повысить производительность, вам может не понадобиться гибридный подход.

В соответствии с блог инженера по MySQL в Facebook, вы должны разделить файлы MySQL так, чтобы на одном диске были все файлы MySQL, которые получают последовательные записи, а на другом диске - файлы MySQL, которые получают случайные записи.

Я уже обсуждал этот подход для MySQL и PostgreSQL раньше.

ИМХО, я бы свел количество символических ссылок к минимуму для всей базы данных InnoDB. Используйте их для связывания с папками или очень большими таблицами журналов.