Spec-Zone.ru › MySQL 9.2

10.5.4 Оптимизация журналирования InnoDB

Рассмотрите следующие рекомендации по оптимизации журналирования:

  • Увеличьте размер файлов журнала. Когда InnoDB записал файлы журнала redo, он должен записать изменённое содержимое буфера пула в диск. Маленькие файлы журнала redo вызывают много ненужных операций записи на диск.

    Размер файла журнала redo определяется параметром innodb_redo_log_capacity. InnoDB пытается поддерживать 32 файла журнала redo одинакового размера, где каждый файл равен 1/32 * innodb_redo_log_capacity. Поэтому изменение значения innodb_redo_log_capacity изменяет размер файлов журнала redo.

    Дополнительную информацию о модификации конфигурации файлов журнала redo см. в Раздел 17.6.5, «Журнал redo».

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

  • Настройте параметр конфигурации innodb_log_write_ahead_size, чтобы избежать “чтения при записи”. Этот параметр определяет размер блока предварительной записи для журнала redo. Установите значение innodb_log_write_ahead_size в соответствии с размером блока кэша операционной системы или файловой системы. Чтение при записи происходит, когда блоки журнала redo не полностью кэшируются операционной системой или файловой системой из-за несоответствия между размером блока предварительной записи для журнала redo и размером блока кэша операционной системы или файловой системы.

    Допустимые значения для innodb_log_write_ahead_size — кратные размеру блока файла журнала InnoDB (2n). Минимальное значение — размер блока файла журнала InnoDB (512). При указании минимального значения предварительная запись не выполняется. Максимальное значение равно значению innodb_page_size. Если вы зададите значение для innodb_log_write_ahead_size, которое больше значения innodb_page_size, значение innodb_log_write_ahead_size усекается до значения innodb_page_size.

    Установка значения innodb_log_write_ahead_size слишком низкого относительно размера блока кэша операционной системы или файловой системы приводит к чтению при записи. Установка значения слишком высокой может незначительно повлиять на производительность fsync при записи файлов журнала из-за записи нескольких блоков одновременно.

  • MySQL предоставляет отдельные потоки записи журнала для записи записей журнала redo из буфера журнала в системные буферы и сброса системных буферов в файлы журнала redo. Вы можете включить или отключить потоки записи журнала с помощью переменной innodb_log_writer_threads. Отдельные потоки записи журнала могут улучшить производительность на системах с высокой конкурентностью, но для систем с низкой конкурентностью отключение отдельных потоков записи журнала повышает производительность.

  • Оптимизируйте использование задержки вращения потоков пользователя, ожидая сброса redo. Задержка вращения помогает уменьшить задержку. В периоды низкой конкурентности уменьшение задержки может быть менее важным, и избегание использования задержки вращения в эти периоды может снизить энергопотребление. В периоды высокой конкурентности вы можете захотеть избежать затрат вычислительных ресурсов на задержку вращения, чтобы они могли использоваться для других задач. Следующие системные переменные позволяют установить высокие и низкие значения порогов, которые определяют границы использования задержки вращения.

    • innodb_log_wait_for_flush_spin_hwm: Определяет максимальное среднее время сброса журнала, после которого потоки пользователей перестают вращаться при ожидании сброса redo. Значение по умолчанию — 400 микросекунд.

    • innodb_log_spin_cpu_abs_lwm: Определяет минимальное использование процессора, ниже которого потоки пользователей перестают вращаться при ожидании сброса redo. Значение выражается как сумма использования ядер процессора. Например, значение по умолчанию 80 — 80% одного ядра процессора. В системе с многоядерным процессором значение 150 представляет 100% использования одного ядра процессора плюс 50% использования второго ядра процессора.

    • innodb_log_spin_cpu_pct_hwm: Определяет максимальное использование процессора, выше которого потоки пользователей перестают вращаться при ожидании сброса redo. Значение выражается в процентах от суммарной вычислительной мощности всех ядер процессора. Значение по умолчанию — 50%. Например, 100% использования двух ядер процессора составляют 50% от суммарной вычислительной мощности процессора на сервере с четырьмя ядрами.

      Параметр конфигурации innodb_log_spin_cpu_pct_hwm учитывает сродство процессора. Например, если у сервера 48 ядер, но процесс mysqld привязан только к четырём ядрам процессора, остальные 44 ядра игнорируются.

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

Spec-Zone.ru

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