Spec-Zone.ru › MySQL 8.4

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 в значение по умолчанию. До MySQL 8.4 это значение устанавливалось в максимальное, а не в значение по умолчанию.

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

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

Spec-Zone.ru

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