Я создаю новый сервер базы данных и пытаюсь удостовериться, что все настроено правильно, насколько это возможно. Хранилище базы данных - это 22 диска Western Digital SAS с оборотом 15,7 тыс. Об / мин в массиве RAID10 во внешнем корпусе SAS с двумя контроллерами RAID. Изначально я создал только один том в массиве SAS, отформатированный с помощью ext2. Я рассчитал Stride и Stripe-Width следующим образом:
- chunk_size = 128 Кб
- block_size = 4 Кб
- total_disks = 22
- data_disks = 11
- stride = chunk_size / block_size = 128 Кб / 4 Кб = 32 Кб
- stripe-width = stride * data_disks = 32 Кб * 11 = 352 Кб
Я присвоил mkfs.ext2 значения Stride и Stripe-Width при создании файловой системы.
Затем я попробовал другую установку, с которой начинается мой вопрос. Я создал два тома в массиве SAS, каждый с отдельным «первичным» контроллером. При экспорте на хост я использовал LVM2 для инициализации их как физических томов, создал группу томов, а затем передал lvcreate --stripes 2, чтобы разделить тома. Целью этого было распределить нагрузку ввода-вывода между обоими контроллерами для более высокой производительности.
В документации по передовым методам работы для массива SAS есть раздел, в котором указывается размер сегмента (блока) LUN:
При использовании диспетчера томов для сбора нескольких LUN системы хранения в логический
Группа томов Volume Manager (LVM) (VG), ширина полосы ввода-вывода распределяется по всем> сегментам всех дисков с данными во всех LUN. Скорректированная формула принимает следующий вид: Размер сегмента LUN = ширина полосы ввода-вывода LVM / (количество дисков с данными / LUN * количество LUN / VG)
Теперь группа томов в массиве SAS состоит из 22 дисков, 11 из которых являются дисками с данными, и два LUN. Группа томов на хозяин имеет два физических тома (LUN), и оба LUN обращаются к одним и тем же дискам с данными. Итак, учитывая размер сегмента LUN 128 Кбайт, мог бы я рассчитать ширину полосы ввода-вывода LVM как
- 128 = LVM_Stripe_Width / (11 * 2)
- 128 * 22 = LVM_Stripe_Width
- 2816 = LVM_Stripe_Width
или
- 128 = LVM_Stripe_Width / (11 * 1)
- 128 * 11 = LVM_Stripe_Width
- 1408 = LVM_Stripe_Width
Затем это подводит меня к вопросу о ширине полосы и полосы для mkfs.ext2: рассчитывается ли она так же, как и при первоначальной настройке, или теперь она отличается из-за уровня LVM? Станет ли это
- chunk_size = 128 Кб
- block_size = 4 Кб
- total_disks = 2
- data_disks = 2
- stride = chunk_size / block_size = 128 Кб / 4 Кб = 32 Кб
- stripe-width = stride * data_disks = 32 Kb * 2 = 64 Kb
где
- total_disks = 2
происходит от '--stripes 2' к lvcreate?
Спасибо,
Кендалл
Я мог бы предложить проверить этот ответ для идей. Я оставил там отзывы относительно выравнивания xfs, а кто-то прокомментировал ext3. Это может дать вам некоторые подсказки.
Кроме того, перед выравниванием файловой системы убедитесь, что ваш том также выровнен по размеру полосы. Это можно сделать путем правильного определения размера метаданных и оптимизации размера экстента. Вот пример:
pvcreate -M2 --metadatasize 2048K --metadatacopies 2 <raw_device>
vgcreate --physicalextentsize 256M --autobackup y vg10 <pv_device>
Вы начинаете оптимизацию не с того места - вам нужно начать с размера страницы, которую использует ваша база данных (16 КБ для InnoDB (MySQL / MariaDB), 8 КБ для PostgreSQL), и оптимизировать оттуда. Я написал статью о важности выравнивание файловой системы что может оказаться полезным для такого рода оптимизации.