17.8.7 Настройка производительности ввода-вывода InnoDB
Поток-мастер InnoDB и другие потоки выполняют различные задачи в фоновом режиме, большинство из которых связаны с вводом-выводом, такие как сброс грязных страниц из буферного пула и запись изменений из буфера изменений в соответствующие вторичные индексы. InnoDB пытается выполнять эти задачи таким образом, чтобы не оказывать негативного влияния на нормальную работу сервера. Он пытается оценить доступную пропускную способность ввода-вывода и настроить свою работу для использования доступной емкости.
Переменная innodb_io_capacity определяет общую емкость ввода-вывода, доступную для InnoDB. Она должна быть установлена приблизительно равной числу операций ввода-вывода, которые система может выполнить в секунду (IOPS). При установке innodb_io_capacity, InnoDB оценивает пропускную способность ввода-вывода, доступную для фоновых задач, на основе заданного значения.
Вы можете установить innodb_io_capacity на значение 100 или выше. Значение по умолчанию — 10000. Как правило, более быстрые жесткие диски, конфигурации RAID и твердотельные накопители (SSD) выигрывают от более высоких значений, чем устройства хранения низкого класса, такие как жесткие диски до 7200 об/мин.
В идеале, поддерживайте это значение как можно ниже, но не так низко, чтобы фоновые задачи отставали. Если значение слишком высокое, данные удаляются из буферного пула и буфера изменений слишком быстро для кэширования, чтобы оно принесло значительную пользу. Для загруженных систем, способных к более высоким скоростям ввода-вывода, вы можете установить более высокое значение, чтобы помочь серверу справиться с фоновой обслуживающей работой, связанной с высоким темпом изменений строк. Как правило, вы можете увеличить значение в зависимости от количества дисков, используемых для InnoDB ввода-вывода. Например, вы можете увеличить значение на системах, использующих несколько дисков или SSD.
Хотя вы можете указать высокое значение, например, миллион, на практике такие большие значения имеют небольшую пользу. Как правило, значение, превышающее 20000, не рекомендуется, если вы не уверены, что более низкие значения недостаточно эффективны для вашей рабочей нагрузки. См. также параметр innodb_io_capacity_max, который автоматически увеличивает это значение, когда сброс отстает.
При настройке innodb_io_capacity учтите рабочую нагрузку записи. Системы с большой рабочей нагрузкой записи, скорее всего, выиграют от более высокого значения. Более низкое значение может быть достаточным для систем с небольшой рабочей нагрузкой записи.
Настройка innodb_io_capacity не является настройкой на уровне экземпляра буферного пула. Доступная емкость ввода-вывода равномерно распределяется среди экземпляров буферного пула для задач сброса.
Вы можете установить значение innodb_io_capacity в файле параметров MySQL (my.cnf или my.ini) или изменить его во время выполнения с помощью оператора SET GLOBAL, который требует привилегий для установки глобальных системных переменных. См. Раздел 7.1.9.1, «Привилегии на системные переменные».
Игнорирование емкости ввода-вывода при контрольных точках
Переменная innodb_flush_sync, которая включена по умолчанию, приводит к тому, что значение innodb_io_capacity игнорируется во время всплесков активности ввода-вывода, которые происходят во время контрольных точек. Чтобы придерживаться скорости ввода-вывода, определенной параметрами innodb_io_capacity и innodb_io_capacity_max, отключите innodb_flush_sync.
Вы можете установить значение innodb_flush_sync в файле параметров MySQL (my.cnf или my.ini) или изменить его во время выполнения с помощью оператора SET
GLOBAL, который требует привилегий для установки глобальных системных переменных. См. Раздел 7.1.9.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.
При настройке innodb_io_capacity_max, двойное значение innodb_io_capacity часто является хорошей отправной точкой. Как и с настройкой 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.