Преимущества MySQL 8 InnoDB 32 КБ и 64 КБ для жесткого диска - PullRequest
0 голосов
/ 28 мая 2019

В документации по размеру страницы MySQL написано:

Для выпусков вплоть до MySQL 5.5 включительно размер каждой страницы InnoDB фиксирован и составляет 16 килобайт.Это значение представляет собой баланс: достаточно большой, чтобы вместить данные для большинства строк, и в то же время достаточно маленький, чтобы минимизировать издержки производительности при переносе ненужных данных в память.Другие значения не проверяются и не поддерживаются.

Начиная с MySQL 5.6, размер страницы для экземпляра InnoDB может составлять 4 КБ, 8 КБ или 16 КБ, управляемый параметром конфигурации innodb_page_size.Начиная с MySQL 5.7.6, InnoDB также поддерживает размеры страниц 32 КБ и 64 КБ .Для 32KB и 64KB размеров страниц ROW_FORMAT = COMPRESSED не поддерживается, а максимальный размер записи составляет 16 КБ.

, а затем

Меньшие размеры страницможет помочь повысить производительность устройств хранения, которые используют блоки небольших размеров, особенно для устройств SSD в дисковых рабочих нагрузках, таких как приложения OLTP.При обновлении отдельных строк в память копируется меньшее количество данных, записывается на диск, реорганизуется, блокируется и т. Д.

Как насчет использования страницы большего размера (32 КБ или 64 КБ), чем по умолчанию 16 КБ?В каком случае вам следует это делать и что вы получаете в качестве выгоды?

Я буду настраивать новый экземпляр MySQL с традиционным жестким диском, и мне было интересно, может ли изменение значения по умолчанию 16 КБ повлиять на производительность, эффективность храненияИспользование.

До сих пор я обнаружил только недостаток использования размера страницы 32 КБ и 64 КБ:

Для страниц размером 32 КБ и 64 КБ ROW_FORMAT = СЖАТЫЙ не поддерживается и максимальный размер записи16 КБ.

1 Ответ

2 голосов
/ 29 мая 2019

Некоторые люди достигают максимального размера строки около 8000 байт.Переход на 32 КБ страниц удваивает этот предел.Однако переключение на 64 КБ не выходит за пределы 16 КБ.

Так как блоки InnoDB имеют тенденцию быть разбросанными вокруг диска, наличие больших блоков немного сэкономит при движении руки на жестком диске.Я ожидаю, что это будет только однозначное улучшение в процентах .И это будет варьироваться в зависимости от вида деятельности.Недавно загруженная таблица может не показать улучшения;таблица с большим количеством оттока может показать некоторые из них.

Если ваш набор данных вписывается в buffer_pool , то ввод / вывод будет небольшим, поэтому размер блока не приходитв игру много.

Стоимость движения рычага несколько минимизируется драйверами или контроллерами, которые оптимизируют порядок дисковых операций.RAID с кешем делает особенно хорошую работу, и он может делать записи практически мгновенно.«Удар кулаком», вероятно, добавляет к частоте движения руки.Классический компромисс: «скорость против пространства».

Если ваш набор данных слишком большой , чтобы поместиться в ОЗУ, и если вы выполняете много «точечных запросов», то меньше размер блока будет лучше.Но если вы выполняете много табличных (или индексных) сканирований, больший размер блока имеет небольшое преимущество.

Имейте в виду, что all данные должны использовать один и тот же размер блока.

Из тысячи вопросов форума, которые я видел, я не думаю, что кто-либо изменил размер блока.Вы будете в неизведанных водах.

Также обратите внимание, что, хотя ROW_FORMAT=COMPRESSED экономит некоторое дисковое пространство, он жует некоторое ОЗУ - это потому, что некоторые (все?) Блоки сохраняютсяв оперативной памяти как сжатые, так и несжатые.

Числа, которые я видел для этого row_format, составляют всего 50%.Любой приличный алгоритм сжатия сжимает практически любой вид текста примерно на 2/3.Поэтому, если у меня возникает желание использовать сжатие, я сжимаю сжимаемые столбцы (например, TEXT, но не jpgs) и делаю это в клиенте , тем самым снимая нагрузку с ЦП с сервера.Я считаю (без каких-либо веских доказательств), что это лучший способ для сжатия ваших данных.Кроме того, я почти никогда не использую BIGINT.

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

У меня есть Правило большого пальца для оптимизации.«Если расчеты за пределами конверта оценивают улучшение менее чем на 10%, то продолжайте - ищите что-то еще для оптимизации».

Итак, я говорю «двигаться дальше».

...