Назад | Перейти на главную страницу

Размер блока MySQL InnoDB ext3

Я ищу рекомендации по размеру блока файловой системы ext3 для MySQL 5.6 с использованием InnoDB.

Запуск виртуальной машины CentOS 5.4 в VMware ESXi 5, хранилище данных VMFS 5 на логических модулях NetApp FibreChannel (размер блока 4 КБ). Используя O_DIRECT, innodb_flush_log_at_trx_commit = 2, буферный пул 14G, и db выполняет OLTP с некоторыми случайными большими запросами, обрабатывающими много данных. Некоторые таблицы имеют размер несколько ГБ и более, другие - очень маленькие. Файлы таблиц и ibdata находятся в одной файловой системе, binlogs и ib_logfiles - в другой, поэтому они могут иметь разные размеры блоков.

Я понимаю, что InnoDB использует размер блока 16k, который не настраивается пользователем, поэтому мне интересно, стоит ли устанавливать соответствующий размер блока ext3 вместо значения по умолчанию 4k.

Спасибо!

Размер блока файловой системы не должен плохо влиять на InnoDB. Я не говорю о крошечных битах производительности процессора, поскольку накладные расходы файловой системы для него исчезающе малы. Вам следует беспокоиться о производительности ввода-вывода.

Когда mysql необходимо прочитать страницу InnodDB с дисков, он обращается к структуре inode для файла. inode ext3 содержит ссылки на 15 блоков. Первые 12 указывают непосредственно на блоки данных. Остальные 3 указывают на блоки, содержащие ссылки на другие блоки, которые также могут быть прямыми или косвенными.

Итак, если страница InnoDB находится в первой (12 * 4) = 48 КБ файла - она ​​будет извлечена за 2 операции ввода-вывода: 1 для inode, вторая для блока данных, если она находится в первой (12 * 4 + 1024) * 4 = 4,2 МБ за 3 операции, (12 + 1024 + 1024 ^ 2) * 4 = 4 ГБ - 4 операции, (12 * бит / с + 1024 + 1024 ^ 2 + 1024 ^ 3) * 4 = 4 ТБ - 5 операций.

1024 - это номер ссылки на 4-байтовый блок в 4-килобайтном блоке.

Readahead (предварительное выделение для записи) и кэширование уменьшат это количество, позволяя читать / записывать несколько блоков одновременно.

Размер блока 4k совпадает с размером страницы памяти Linux, что упрощает кодирование кеширования страниц.

Когда страница Innodb будет записана в первый раз, ext3 предварительно выделит 8 последовательных блоков (32 КБ) и запишет 4 из них, остальные 4 будут отброшены (или использованы для еще одной страницы). Все изменения на этой странице будут храниться в тех же блоках.

Уменьшение размера блока дает только преимущество в экономии дискового пространства, поскольку 1 блок - это минимальная единица данных для хранения на диске.

Его увеличение (для этого есть несколько патчей ядра) улучшит производительность для очень больших файлов, но не так сильно, как вы думаете. Сопоставление его с размером страницы InnoDB не имеет смысла, поскольку в подавляющем большинстве случаев блоки данных для одной страницы InnoDB будут последовательно лежать на диске и будут считываться / записываться за одну операцию.

Неважно, для ext2 / 3 доступны только блоки размером 1K, 2K, 4K.

из Справочная страница mke3fs (8):

       -b block-size
          Specify  the  size  of  blocks in bytes.  Valid block size vales are 1024, 2048 and 4096 bytes per block.