Spec-Zone.ru › MySQL 5.7

14.8.1 Настройка запуска InnoDB

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

Этот раздел содержит информацию о задании параметров InnoDB в файле конфигурации, просмотре информации об инициализации InnoDB и важных соображениях по хранению.

  • Указание параметров в файле конфигурации MySQL

  • Просмотр информации об инициализации InnoDB

  • Важные соображения по хранению

  • Конфигурация файла данных системного табличного пространства

  • Конфигурация файла журнала переигрывания

  • Конфигурация табличного пространства отмены

  • Конфигурация временного табличного пространства

  • Конфигурация размера страницы

  • Конфигурация памяти

Указание параметров в файле конфигурации MySQL

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

Вы можете разместить параметры InnoDB в группе [mysqld] любого файла параметров, который считывает ваш сервер при запуске. Местоположение файлов параметров MySQL описано в разделе 4.2.2.2, “Использование файлов параметров”.

Чтобы убедиться, что mysqld считывает параметры только из определённого файла, используйте параметр --defaults-file как первый параметр в командной строке при запуске сервера:

mysqld --defaults-file=path_to_option_file

Просмотр информации об инициализации InnoDB

Чтобы просмотреть информацию об инициализации InnoDB при запуске, запустите mysqld из командной строки, которая выведет информацию об инициализации в консоль.

Например, в Windows, если mysqld находится в C:\Program Files\MySQL\MySQL Server 5.7\bin, запустите сервер MySQL так:

C:\> "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld" --console

В Unix-подобных системах mysqld находится в каталоге bin вашей установки MySQL:

$> bin/mysqld --user=mysql &

Если выходные данные сервера не направляются в консоль, проверьте журнал ошибок после запуска, чтобы увидеть информацию об инициализации InnoDB, напечатанную во время процесса запуска.

Для получения информации о запуске MySQL с помощью других методов см. раздел 2.9.5, “Автоматический запуск и остановка MySQL”.

Примечание

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

Важные соображения по хранению

Перед продолжением настройки запуска рассмотрите следующие соображения, связанные с хранением.

  • В некоторых случаях вы можете повысить производительность базы данных, разместив файлы данных и журналов на отдельных физических дисках. Вы также можете использовать необработанные разделы дисков (сырые устройства) для InnoDB файлов данных, что может ускорить ввод-вывод. См. Использование необработанных разделов дисков для системного табличного пространства.

  • InnoDB — это транзакционно-безопасный (совместимый с ACID) движок хранения с возможностями подтверждения, отката и восстановления после сбоя для защиты данных пользователя. Однако он не может сделать это, если основная операционная система или оборудование работают не так, как заявлено. Многие операционные системы или подсистемы дисков могут откладывать или переупорядочивать операции записи для повышения производительности. В некоторых операционных системах системный вызов fsync(), который должен ожидать, пока все несохранённые данные для файла не будут сброшены, может фактически возвращать значение до того, как данные будут сброшены в стабильное хранилище. Из-за этого сбой операционной системы или отключение питания могут привести к потере недавно подтверждённых данных или, в худшем случае, к повреждению базы данных из-за переупорядочения операций записи. Если целостность данных для вас важна, проведите тесты “выключения питания” перед использованием чего-либо в рабочей среде. В macOS InnoDB использует специальный метод сброса файлов fcntl(). В Linux рекомендуется отключить кэш обратного сброса.

    На дисках ATA/SATA команда, такая как hdparm -W0 /dev/hda, может быть использована для отключения кэша обратного сброса. Следует помнить, что некоторые диски или контроллеры дисков могут не поддерживать отключение кэша обратного сброса.

  • Что касается возможностей восстановления InnoDB, которые защищают данные пользователя, InnoDB использует метод сброса файлов, включающий структуру под названием, которая включена по умолчанию (innodb_doublewrite=ON). Буфер двойной записи повышает безопасность восстановления после неожиданного завершения работы или отключения питания и улучшает производительность в большинстве вариантов Unix, уменьшая необходимость в fsync() операциях. Рекомендуется, чтобы параметр innodb_doublewrite оставался включённым, если вы обеспокоены целостностью данных или возможными сбоями. Сведения о буфере двойной записи см. в разделе 14.12.1, “Ввод-вывод дисков InnoDB”.

  • Перед использованием NFS с InnoDB ознакомьтесь с потенциальными проблемами, описанными в Использование NFS с MySQL.

  • Запуск сервера MySQL на жёстком диске с размером сектора 4 КБ в Windows не поддерживается с innodb_flush_method=async_unbuffered, который является значением по умолчанию. В качестве обходного решения можно использовать innodb_flush_method=normal.

Настройка файла данных системного табличного пространства

Параметр innodb_data_file_path определяет имя, размер и атрибуты файлов данных системного табличного пространства. Если этот параметр не настроен перед инициализацией сервера MySQL, по умолчанию создается единственный автоматически расширяющийся файл данных, немного больше 12 МБ, с именем ibdata1:

mysql> SHOW VARIABLES LIKE 'innodb_data_file_path';
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
+-----------------------+------------------------+

Полный синтаксис спецификации файла данных включает имя файла, размер файла, атрибут autoextend и атрибут max:

file_name:file_size[:autoextend[:max:max_file_size]]

Размеры файлов задаются в килобайтах, мегабайтах или гигабайтах путём добавления K, M или G к значению размера. Если размер файла данных задаётся в килобайтах, он должен быть кратен 1024. В противном случае значения килобайт округляются до ближайшего значения мегабайтов (МБ). Сумма размеров файлов должна быть как минимум немного больше 12 МБ.

Можно указать несколько файлов данных, разделив их точкой с запятой. Например:

[mysqld]
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend

Атрибуты autoextend и max могут использоваться только для файла данных, который указан последним.

Когда указан атрибут autoextend, размер файла данных автоматически увеличивается на 64 МБ при необходимости. Размер приращения контролируется переменной innodb_autoextend_increment.

Для задания максимального размера автоматически расширяемого файла данных используйте атрибут max после атрибута autoextend. Используйте атрибут max только в тех случаях, когда ограничение использования дискового пространства имеет критически важное значение. Следующая конфигурация позволяет файлу ibdata1 расти до предела в 500 МБ:

[mysqld]
innodb_data_file_path=ibdata1:12M:autoextend:max:500M

Для первого файла данных системного табличного пространства применяется минимальный размер файла, чтобы обеспечить достаточное место для страниц буфера doublewrite. В следующей таблице показаны минимальные размеры файлов для каждого размера страницы InnoDB. По умолчанию размер страницы InnoDB составляет 16384 (16 КБ).

Размер страницы (innodb_page_size) Минимальный размер файла
16384 (16 КБ) или меньше 3 МБ
32768 (32 КБ) 6 МБ
65536 (64 КБ) 12 МБ

Если диск заполнится, можно добавить файл данных на другой диск. Инструкции см. в Разделе «Изменение размера системного табличного пространства».

Предел размера отдельных файлов определяется вашей операционной системой. Размер файла можно задать больше 4 ГБ в операционных системах, которые поддерживают большие файлы. Также можно использовать сырые разделы дисков в качестве файлов данных. См. Раздел «Использование сырых разделов дисков для системного табличного пространства».

MySQL не учитывает максимальный размер файла файловой системы, поэтому будьте осторожны с файловыми системами, где максимальный размер файла небольшой, например, 2 ГБ.

Файлы системного табличного пространства по умолчанию создаются в каталоге данных (datadir). Чтобы указать альтернативное расположение, используйте параметр innodb_data_home_dir. Например, чтобы создать файл данных системного табличного пространства в каталоге с именем myibdata, используйте следующую конфигурацию:

[mysqld]
innodb_data_home_dir = /myibdata/
innodb_data_file_path=ibdata1:50M:autoextend

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

InnoDB формирует путь к каждому файлу данных путём текстового конкатенации значения innodb_data_home_dir с именем файла данных. Если innodb_data_home_dir не определено, значение по умолчанию — «./», что соответствует каталогу данных. (Сервер MySQL меняет свой текущий рабочий каталог на каталог данных при начале выполнения).

Если вы укажете innodb_data_home_dir как пустую строку, вы можете указать абсолютные пути к файлам данных, перечисленные в значении innodb_data_file_path. Следующая конфигурация эквивалентна предыдущей:

[mysqld]
innodb_data_home_dir =
innodb_data_file_path=/myibdata/ibdata1:50M:autoextend

Настройка файлов журнала переигрывания

По умолчанию InnoDB создаёт два файла журнала переигрывания размером 5 МБ с именами ib_logfile0 и ib_logfile1 в каталоге данных.

Для изменения конфигурации по умолчанию можно использовать следующие параметры:

  • innodb_log_group_home_dir определяет путь к каталогу файлов журнала переигрывания. Если этот параметр не настроен, файлы журнала переигрывания создаются в каталоге данных MySQL (datadir).

    Можно использовать этот параметр, чтобы разместить файлы журнала переигрывания в другом физическом хранилище, отличном от файлов данных, чтобы избежать потенциальных конфликтов ресурсов ввода/вывода. Например:

    [mysqld]
    innodb_log_group_home_dir = /dr3/iblogs
    
    Примечание

    InnoDB не создаёт каталоги, поэтому убедитесь, что каталог журнала существует до запуска сервера. Используйте команду Unix или DOS mkdir для создания необходимых каталогов.

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

  • innodb_log_files_in_group определяет количество файлов журнала в группе журналов. Значение по умолчанию и рекомендуемое значение — 2.

  • innodb_log_file_size определяет размер в байтах каждого файла журнала в группе журналов. Общий размер файлов журнала (innodb_log_file_size * innodb_log_files_in_group) не может превышать максимальное значение, которое немного меньше 512 ГБ. Например, пара файлов журналов размером 255 ГБ приближается к пределу, но не превышает его. Размер файла журнала по умолчанию составляет 48 МБ. Как правило, общий размер файлов журнала должен быть достаточно большим, чтобы сервер мог сгладить пики и спады в активности рабочей нагрузки, что часто означает наличие достаточного места в журнале переигрывания для обработки более чем часовой активности записи. Более большой размер файла журнала означает меньшую активность сброса контрольных точек в буферном пуле, что уменьшает ввод/вывод на диск. Дополнительную информацию см. в разделе 8.5.4 «Оптимизация журналирования InnoDB».

Настройка табличного пространства отката

Журналы отката по умолчанию являются частью системного табличного пространства. Однако можно хранить журналы отката в одном или нескольких отдельных табличных пространствах отката, обычно на другом накопителе.

Настройка innodb_undo_directory определяет путь, по которому InnoDB создаёт отдельные табличные пространства для журналов отката. Этот параметр обычно используется совместно с параметрами innodb_rollback_segments и innodb_undo_tablespaces, которые определяют структуру размещения на диске журналов отката вне системного табличного пространства.

Примечание

innodb_undo_tablespaces устарел; ожидается, что он будет удалён в будущей версии.

Дополнительную информацию см. в разделе 14.6.3.4 «Табличные пространства отката».

Настройка временного табличного пространства

По умолчанию в каталоге innodb_data_home_dir создаётся один файл данных временного табличного пространства с автоматическим расширением, имеющий имя ibtmp1. Начальный размер файла немного больше 12 МБ. Настройка файла данных временного табличного пространства по умолчанию может быть изменена во время запуска с помощью опции innodb_temp_data_file_path.

Опция innodb_temp_data_file_path указывает путь, имя файла и размер файла для данных временного табличного пространства. Полный путь к каталогу формируется путём конкатенации innodb_data_home_dir с путём, указанным в innodb_temp_data_file_path. Размер файла указывается в КБ, МБ или ГБ (1024 МБ) путём добавления K, M или G к значению размера. Размер файла или суммарный размер файлов должен быть немного больше 12 МБ.

Значение по умолчанию для innodb_data_home_dir — это каталог данных MySQL (datadir).

Файл данных временного табличного пространства с автоматическим расширением может стать очень большим в средах, использующих большие временные таблицы или часто использующих временные таблицы. Большой размер файла также может быть результатом длительных запросов, использующих временные таблицы. Чтобы предотвратить чрезмерное увеличение размера файла временных данных, настройте опцию innodb_temp_data_file_path для указания максимального размера файла данных. Дополнительную информацию см. в разделе Управление размером файла данных временного табличного пространства.

Настройка размера страницы

Опция innodb_page_size задаёт размер страницы для всех InnoDB табличных пространств в экземпляре MySQL. Это значение устанавливается при создании экземпляра и остаётся постоянным после этого. Допустимые значения — 64 КБ, 32 КБ, 16 КБ (по умолчанию), 8 КБ и 4 КБ. Кроме того, вы можете указать размер страницы в байтах (65536, 32768, 16384, 8192, 4096).

Размер страницы по умолчанию 16 КБ подходит для широкого спектра рабочих нагрузок, особенно для запросов, включающих сканирование таблиц и операции DML, связанные с массовыми обновлениями. Более мелкие размеры страниц могут быть эффективнее для рабочих нагрузок OLTP, включающих множество небольших записей, где проблемами могут быть конфликты, когда одна страница содержит множество строк. Меньшие страницы также могут быть эффективнее для устройств хранения SSD, которые обычно используют небольшие размеры блоков. Поддержание размера страницы InnoDB близким к размеру блока устройства хранения минимизирует количество неизменённых данных, которые переписываются на диск.

Важно

innodb_page_size можно установить только при инициализации каталога данных. Для получения дополнительной информации см. описание этой переменной.

Настройка памяти

MySQL выделяет память для различных кэшей и буферов для повышения производительности операций с базой данных. При выделении памяти для InnoDB всегда учитывайте память, необходимую операционной системе, память, выделенную другим приложениям, и память, выделенную для других буферов и кэшей MySQL. Например, если вы используете MyISAM таблицы, учитывайте количество памяти, выделенной для буфера ключей (key_buffer_size). Обзор буферов и кэшей MySQL см. в разделе Раздел 8.12.4.1, «Как MySQL использует память».

Буферы, специфичные для InnoDB, настраиваются с помощью следующих параметров:

  • innodb_buffer_pool_size определяет размер буфера пула, который является областью памяти, хранящей кэшированные данные для InnoDB таблиц, индексов и других вспомогательных буферов. Размер буфера пула важен для производительности системы, и обычно рекомендуется, чтобы innodb_buffer_pool_size составлял 50–75% от объёма оперативной памяти. По умолчанию размер буфера пула составляет 128 МБ. Дополнительные рекомендации см. в разделе Раздел 8.12.4.1, «Как MySQL использует память». Сведения о настройке размера буфера пула InnoDB см. в разделе Раздел 14.8.3.1, «Настройка размера буфера пула InnoDB». Размер буфера пула можно настроить при запуске или динамически.

    В системах с большим объёмом оперативной памяти можно повысить конкуретноспособность, разделив буфер пула на несколько экземпляров буфера пула. Количество экземпляров буфера пула управляется опцией innodb_buffer_pool_instances. По умолчанию InnoDB создаёт один экземпляр буфера пула. Количество экземпляров буфера пула можно настроить при запуске. Для получения дополнительной информации см. Раздел 14.8.3.2, «Настройка нескольких экземпляров буфера пула».

  • innodb_log_buffer_size определяет размер буфера, который InnoDB использует для записи в файлы журнала на диске. По умолчанию размер составляет 16 МБ. Большой буфер журнала позволяет выполнять большие транзакции без записи журнала на диск перед подтверждением транзакции. Если у вас есть транзакции, обновляющие, вставляющие или удаляющие множество строк, вы можете рассмотреть возможность увеличения размера буфера журнала для экономии операций ввода-вывода на диск. innodb_log_buffer_size можно настроить при запуске. Для получения дополнительной информации см. Раздел 8.5.4, «Оптимизация протоколирования InnoDB».

Предупреждение

В 32-битных системах GNU/Linux x86, если использование памяти установлено слишком высоким, glibc может позволить куче процесса расти сверх стеков потоков, что приведёт к сбою сервера. Это риск, если память, выделенная процессу mysqld для глобальных и потоковых буферов и кэшей, близка или превышает 2 ГБ.

Для оценки использования памяти MySQL можно использовать формулу, аналогичную следующей, которая рассчитывает распределение глобальной и потоковой памяти для MySQL. Вам может потребоваться изменить формулу, чтобы учесть буферы и кэши в вашей версии и конфигурации MySQL. Обзор буферов и кэшей MySQL см. в разделе Раздел 8.12.4.1, «Как MySQL использует память».

innodb_buffer_pool_size
+ key_buffer_size
+ max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size)
+ max_connections*2MB

Каждый поток использует стек (часто 2 МБ, но только 256 КБ в бинарных файлах MySQL, предоставленных компанией Oracle Corporation.) и в худшем случае также использует sort_buffer_size + read_buffer_size дополнительной памяти.

В Linux, если ядро поддерживает большие страницы, InnoDB может использовать большие страницы для выделения памяти для своего буфера пула. См. Раздел 8.12.4.3, «Включение поддержки больших страниц».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-init-startup-configuration.html

Spec-Zone.ru

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