Категорії
FreeBSD Solaris

Тюнинг zfs под разные задачи

Базы данных, web сервера

Если вы используете mysql+memcached, то возникает процесс двойного кеширования: zfs и memcached – каждый из них кеширует. Выход один: разрешить кешировать только метаданные.

Возможные значения для обоих свойств – allnone и 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 можно прочесть здесь

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff