Тюнинг mysql/postgresql on zfs/ext4

Ниже будет описан тюнинг самой mysql + OS-специфический. Тюнинг будет рассмотрен только для движка InnoDB.

mysql

Обязательно разнести базу и логи (innodb_log_group_home_dir) по разным датасетам (дискам). В идеале вынести на отдельный датасет и tmp_dir для mysql.

Установим правильные размеры recordsize для базы (database/mysql) и журналов (redolog):

# zfs set recordsize=16K database/mysql
# zfs set recordsize=128K redolog

Примечание:

Для myisaam — 8K

Тюним буфер и кешь:

# zfs set primarycache=metadata database/mysql
# zfs set primarycache=metadata redolog
# zfs set secondarycache=none database/mysql
# zfs set secondarycache=none redolog
# zfs set logbias=throughput database/mysql
# zfs set logbias=throughput redolog

Прочий тюнинг zfs:

# zfs set atime=off database/mysql
# zfs set atime=off redolog
# zfs set compression=on database/mysql
# zfs set compression=on redolog

my.cnf:

innodb_flush_log_at_trx_commit = 2
innodb_file_format=barracuda
innodb_flush_method=O_DSYNC
skip-innodb_doublewrite

Последняя строка отключает буфер двойной записи (то есть дополнительной записи со стороны mysql). Это сделано для того, что бы использовать транзакционный журнал на стороне ФС.

Можно дополнительно отключить подсчёт CRC:

innodb_checksum_algorithm = none

PostgreSQL

Обязательно разнести базу и логи (pg_xlog) по разным датасетам (дискам).

Установим правильные размеры recordsize для базы (database/postgresql)

# zfs set recordsize=8K database/mysql

Тюним буфер и кешь:

# zfs set primarycache=metadata database/postgresql
# zfs set logbias=throughput database/postgresql

FreeBSD

/boot/loader.conf:

vfs.zfs.prefetch_disable=1
vfs.zfs.cache_flush_disable=1

Обязательно ограничить ARC кешь (не больше половины всей оперативной памяти):

vm.kmem_size_max=3G

Solaris

/etc/system:

set zfs:zfs_prefetch_disable=1
set zfs:zfs_nocacheflush=1

Обязательно ограничить ARC кешь (не больше половины всей оперативной памяти):

set zfs:zfs_arc_max=12884901888

Разное.

Очень неплохо расписано различие O_DIRECT / O_DSYNC здесь

Linux (ext4)

Здесь в принципе общие рекомендации:

barrier=0
noatime, nodiratime
data=writeback
commit=600

Возможно с data=journal (включения транзакционного лога) будет быстрее. Нужно экспериментировать.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *