Категорії
DataBases FreeBSD Linux Solaris

Тюнинг 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

Для FreeBSD можно еще

# zfs set redundant_metadata=most database/mysql
# zfs set redundant_metadata=most 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 можно еще

# zfs set redundant_metadata=most 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 адреса не оприлюднюватиметься. Обов’язкові поля позначені *

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