Базы данных, web сервера
Если вы используете mysql+memcached, то возникает процесс двойного кеширования: zfs и memcached – каждый из них кеширует. Выход один: разрешить кешировать только метаданные.
Возможные значения для обоих свойств – all, none и metadata. При установке на all выполняется кэширование данных пользователя и метаданных. При установке на none кэширование данных пользователя и метаданных не выполняется. При установке на metadata выполняется кэширование только метаданных. Значением по умолчанию является all.
#zfs set primarycache=metadata database/mysql
#zfs set secondarycache=none database/mysql
Так же можно ещё изменить
#zfs set logbias=throughput database/mysql
а для журналов БД mysql можно выставить ещё
#zfs set logbias=latency database/mysql_logs
И заодно так же отключить это через mysql (добавить строку в my.cnf):
skip-innodb_doublewrite
Так же немаловажным фактором является включение noatime для ФС.
#zfs set atime=off database/mysql
InnoDB работает с файлом данных страницами по 16KB, пока вы не перекомпилируете его с другим размером страницы. Важно установить ZFS recordsize равным размеру страницы. Это нужно сделать прежде чем будут созданы какие либо файлы в разделе (это нужно сделать не только на ФС с базой, но и на ФС с логами)
#zfs set recordsize=16K database/mysql
А для журналов лучше ставить 128К
zfs set recordsize=128K database/mysql_logs
Увеличение лимита на количество файловых дескрипторов тоже влияет на производительность (добавляем строки в /etc/system и перегружаемся)
# Hard limit on the file descriptors for a single process
set rlim_fd_max = 260000
# Soft limit on the file descriptors for a single process
set rlim_fd_cur = 260000
В ZFS существует такая полезная возможность, как предварительное чтение данных, оно же prefetch. При этом в ZFS реализовано предварительное чтение как на файловом, так и на блочном уровне. Но этот механизм не всегда себя оправдывает, поэтому лучше всего его отключать (добавляем строку в /etc/system и перегружаемся):
set zfs:zfs_prefetch_disable = 1
Ограничим размер кэша ZFS в оперативной памяти (добавляем строку в /etc/system и перегружаемся)
set zfs:zfs_arc_max = 32212254720
Обычно ARC может занимать почти всю оперативную память (оперативная память минус 1Гб), но зачем столько памяти отдавать? Достаточно отдавать не больше половины (в нашем примере в системе 64 Гб, и мы отдаём не больше 32Гб)
Разнесение базы и журналов на разные диски тоже способствует увеличению производительности.
Дополнительно о рекомендация работы баз данных на zfs можно прочесть здесь