Spec-Zone.ru › MySQL 5.7

14.8.8 Настройка емкости ввода-вывода InnoDB

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

Переменная innodb_io_capacity определяет общую емкость ввода-вывода, доступную для InnoDB. Она должна быть установлена приблизительно равной количеству операций ввода-вывода, которые система может выполнить в секунду (IOPS). Когда innodb_io_capacity установлена, InnoDB оценивает пропускную способность ввода-вывода, доступную для фоновых задач, на основе заданного значения.

Вы можете установить innodb_io_capacity на значение 100 или больше. Значение по умолчанию — 200. Обычно значения около 100 подходят для устройств хранения потребительского уровня, таких как жёсткие диски до 7200 об/мин. Более быстрые жёсткие диски, конфигурации RAID и твердотельные накопители (SSD) выигрывают от более высоких значений.

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

Значение по умолчанию 200, как правило, достаточно для SSD начального уровня. Для высокопроизводительного SSD, подключённого по шине, рассмотрите более высокое значение, например, 1000. Для систем с отдельными дисками 5400 об/мин или 7200 об/мин, вы можете уменьшить это значение до 100, что представляет собой приблизительную долю операций ввода-вывода в секунду (IOPS), доступных для дисков более старого поколения, которые могут выполнять около 100 IOPS.

Хотя вы можете указать высокое значение, например, миллион, на практике такие большие значения малоэффективны. Как правило, значение выше 20000 не рекомендуется, если вы не уверены, что меньшие значения не подходят для вашей рабочей нагрузки.

Учитывайте рабочую нагрузку записи при настройке innodb_io_capacity. Системы с большой рабочей нагрузкой записи, вероятно, получат выгоду от более высокого значения. Меньшее значение может быть достаточным для систем с небольшой рабочей нагрузкой записи.

Настройка innodb_io_capacity не является настройкой для каждого экземпляра буферного пула. Доступная емкость ввода-вывода распределяется равномерно между экземплярами буферного пула для задач сброса.

Вы можете установить значение innodb_io_capacity в файле параметров MySQL (my.cnf или my.ini) или изменить его во время работы с помощью оператора SET GLOBAL, для чего требуются привилегии, достаточные для установки глобальных системных переменных. См. Раздел 5.1.8.1, «Привилегии системных переменных».

Игнорирование емкости ввода-вывода в контрольных точках

Переменная innodb_flush_sync, которая включена по умолчанию, заставляет значение innodb_io_capacity игнорироваться во время всплесков активности ввода-вывода, происходящих в контрольных точках. Чтобы придерживаться скорости ввода-вывода, определённой параметром innodb_io_capacity, отключите innodb_flush_sync.

Вы можете установить значение innodb_flush_sync в файле параметров MySQL (my.cnf или my.ini) или изменить его во время работы с помощью оператора SET GLOBAL, для чего требуются привилегии, достаточные для установки глобальных системных переменных. См. Раздел 5.1.8.1, «Привилегии системных переменных».

Настройка максимальной емкости ввода-вывода

Если операции сброса отстают, InnoDB может сбрасывать данные более агрессивно, с большей скоростью операций ввода-вывода в секунду (IOPS), чем определено переменной innodb_io_capacity. Переменная innodb_io_capacity_max определяет максимальное количество IOPS, выполняемых InnoDB фоновыми задачами в таких ситуациях.

Если вы укажете настройку innodb_io_capacity при запуске, но не укажете значение для innodb_io_capacity_max, innodb_io_capacity_max по умолчанию будет равно удвоенному значению innodb_io_capacity или 2000, в зависимости от большего значения.

При настройке innodb_io_capacity_max, удвоенное значение innodb_io_capacity часто является хорошей отправной точкой. Значение по умолчанию 2000 предназначено для рабочих нагрузок, использующих SSD или более одного обычного диска. Значение 2000, вероятно, слишком велико для рабочих нагрузок, не использующих SSD или несколько дисков, и может позволить слишком много сбросов. Для одного обычного жёсткого диска рекомендуется значение от 200 до 400. Для высокопроизводительного SSD, подключённого по шине, рассмотрите более высокое значение, например, 2500. Как и с настройкой innodb_io_capacity, старайтесь поддерживать это значение как можно меньше, но не так мало, чтобы InnoDB не мог достаточно увеличить скорость IOPS за пределами innodb_io_capacity значения.

Учитывайте рабочую нагрузку записи при настройке innodb_io_capacity_max. Системы с большой рабочей нагрузкой записи могут извлечь выгоду из более высокого значения. Более низкое значение может быть достаточным для систем с небольшой рабочей нагрузкой записи.

innodb_io_capacity_max не может быть установлено на значение, меньшее, чем значение innodb_io_capacity.

Установка innodb_io_capacity_max на значение DEFAULT с помощью оператора SET (SET GLOBAL innodb_io_capacity_max=DEFAULT) устанавливает innodb_io_capacity_max на максимальное значение.

Ограничение innodb_io_capacity_max применяется ко всем экземплярам буферного пула. Это не настройка на каждый экземпляр буферного пула.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-configuring-io-capacity.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API