Проект

Общее

Профиль

Zfs + mysql

# Родительский датасет для удобства управления
zfs create tank/mysql
# Датасет для данных (InnoDB data files)
zfs create tank/mysql/data
# Датасет для логов (InnoDB redo logs, binary logs)
zfs create tank/mysql/logs
# Совпадение размера блока ZFS с размером страницы InnoDB (16KB)
zfs set recordsize=16k tank/mysql/data
# Отключение двойной буферизации (ZFS кэширует данные в ARC, кэш ОС тут лишний)
zfs set primarycache=metadata tank/mysql/data
# Включение быстрого и легкого сжатия (экономит место и ускоряет IO)
zfs set compression=lz4 tank/mysql/data
# Отключение записи времени последнего доступа
zfs set atime=off tank/mysql/data
# Логи пишутся последовательно, стандартный блок 128KB или 64KB идеален
zfs set recordsize=128k tank/mysql/logs
# Для логов кэш ARC вообще не нужен (они только пишутся и редко читаются)
zfs set primarycache=none tank/mysql/logs
# Включаем сжатие и выключаем atime
zfs set compression=lz4 tank/mysql/logs
zfs set atime=off tank/mysql/logs
[mysqld]
# Отключаем doublewrite, так как ZFS — это COW (Copy-on-Write) система
innodb_doublewrite = 0
# Ограничиваем использование оперативной памяти под InnoDB 
# (Оставьте 50-60% под InnoDB, остальное заберет кэш ZFS ARC)
innodb_buffer_pool_size = 64G
# Количество инстансов буферного пула (по 8 ГБ на инстанс: 64/8 = 8)
innodb_buffer_pool_instances = 8
# Настройка метода сброса данных на диск
innodb_flush_method = O_DIRECT

backups:

zfs snapshot tank/mysql/data@backup_$(date +%F)