Spec-Zone.ru › MySQL 9.2

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

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

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

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

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

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

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

  • Конфигурация файла буфера двойной записи InnoDB

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

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

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

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

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

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

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

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

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

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

mysqld --defaults-file=path_to_option_file

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

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

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

C:\> "C:\Program Files\MySQL\MySQL Server 9.2\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 оставался включенным, если вы обеспокоены целостностью данных или возможными отказами. Для получения информации о буфере двойной записи см. Раздел 17.11.1, “Ввод-вывод на диск InnoDB”.

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

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

Параметр innodb_data_file_path определяет имя, размер и атрибуты файлов данных системной табличной области InnoDB. Если этот параметр не настроен до инициализации сервера 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 ГБ. Также можно использовать разделы жёстких дисков в качестве файлов данных. См. Использование разделов жёстких дисков для системной табличной области.

InnoDB не осведомлён о максимальном размере файла в файловой системе, поэтому будьте осторожны на файловых системах, где максимальный размер файла является небольшим значением, таким как 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 меняет свой текущий рабочий каталог на каталог данных при запуске.)

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

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

При указании абсолютного пути для innodb_data_file_path значение не конкатенируется со значением innodb_data_home_dir. Файлы системной табличной области создаются в указанном абсолютном пути. Указанный каталог должен существовать до запуска сервера.

Конфигурация файла буфера InnoDB Doublewrite

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

Чтобы создать файлы doublewrite в месте, отличном от каталога innodb_data_home_dir, настройте переменную innodb_doublewrite_dir. Например:

innodb_doublewrite_dir=/path/to/doublewrite_directory

Другие переменные буфера doublewrite позволяют определить количество файлов doublewrite, количество страниц на поток и размер пакета doublewrite. Дополнительную информацию о конфигурации буфера doublewrite см. в разделе Раздел 17.6.4, «Буфер doublewrite».

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

Объем дискового пространства, занимаемого файлами журнала перегенерации, контролируется переменной innodb_redo_log_capacity, которую можно установить при запуске или во время работы; например, чтобы установить переменную в 8 ГБ в файле опций, добавьте следующую запись:

[mysqld]
innodb_redo_log_capacity = 8589934592

Сведения о настройке емкости журнала перегенерации во время работы см. в разделе Настройка емкости журнала перегенерации.

Переменная innodb_redo_log_capacity заменяет переменные innodb_log_file_size и innodb_log_files_in_group, которые устарели. При определении параметра innodb_redo_log_capacity параметры innodb_log_file_size и innodb_log_files_in_group игнорируются; в противном случае, если один или оба из этих устаревших параметров определены, они используются для вычисления Innodb_redo_log_capacity_resized как (innodb_log_files_in_group * innodb_log_file_size). Если ни одна из этих переменных не установлена, используется значение по умолчанию innodb_redo_log_capacity.

InnoDB пытается поддерживать 32 файла журнала перегенерации, каждый из которых равен 1/32 * innodb_redo_log_capacity. Файлы журнала перегенерации находятся в каталоге #innodb_redo в каталоге данных, если не был указан другой каталог с помощью переменной innodb_log_group_home_dir. Если innodb_log_group_home_dir определен, файлы журнала перегенерации находятся в каталоге #innodb_redo в этом каталоге. Дополнительную информацию см. в разделе Раздел 17.6.5, «Журнал перегенерации».

Вы можете задать другое количество файлов журнала перегенерации и другой размер файла журнала перегенерации при инициализации экземпляра MySQL Server, настроив переменные innodb_log_files_in_group и innodb_log_file_size.

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

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

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

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

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

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

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

Журналы отмены по умолчанию находятся в двух пространствах таблиц отмены, созданных при инициализации экземпляра MySQL.

Переменная innodb_undo_directory определяет путь, где InnoDB создает пространства таблиц отмены по умолчанию. Если эта переменная не определена, пространства таблиц отмены по умолчанию создаются в каталоге данных. Переменная innodb_undo_directory не является динамической. Для ее настройки необходимо перезапустить сервер.

Паттерны ввода-вывода для журналов отмены делают пространства таблиц отмены хорошим выбором для хранения.

Сведения о настройке дополнительных пространств таблиц отмены см. в разделе Раздел 17.6.3.4, «Пространства таблиц отмены».

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

Глобальное временное табличное пространство хранит сегменты отката для изменений, внесенных в созданные пользователем временные таблицы.

Один файл данных глобального временного табличного пространства с автоматическим расширением под названием ibtmp1 в каталоге innodb_data_home_dir по умолчанию. Начальный размер файла немного больше 12 МБ.

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

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

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

В MySQL 9.2 InnoDB всегда используется в качестве движка хранения на диске для внутренних временных таблиц.

Переменная innodb_temp_tablespaces_dir определяет расположение, где InnoDB создает временные пространства таблиц сеанса. По умолчанию это каталог #innodb_temp в каталоге данных.

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

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

Параметр 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 см. в разделе 10.12.3.1, «Как MySQL использует память».

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

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

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

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

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

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

Для оценки использования памяти MySQL можно использовать формулу, аналогичную следующей, которая вычисляет выделение глобальной и потоковой памяти MySQL. Возможно, вам потребуется изменить формулу, чтобы учесть буферы и кэши в вашей версии и конфигурации MySQL. Обзор буферов и кэшей MySQL см. в разделе 10.12.3.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.) и в худшем случае также использует sort_buffer_size + read_buffer_size дополнительной памяти.

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

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

Spec-Zone.ru

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