Spec-Zone .ru
спецификации, руководства, описания, API

14.2.1.2. Конфигурирование InnoDB

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

Краткий обзор Табличной области InnoDB и Файлов журнала

Два важных находящихся на диске ресурса, которыми управляют InnoDB механизм хранения является своими файлами данных табличной области и своими файлами журнала. Если Вы определяете нет InnoDB параметры конфигурации, MySQL создает авторасширяющийся файл данных, немного больше чем 12 МБ, названных ibdata1 и два файла журнала называют ib_logfile0 и ib_logfile1 в каталоге данных MySQL. Их размер дается размером innodb_log_file_size системная переменная. Чтобы получить хорошую производительность, явно обеспечьте InnoDB параметры как обсуждено в следующих примерах. Естественно, отредактируйте настройки, чтобы удовлетворить Вашим аппаратным средствам и требованиям.

Примеры, показанные здесь, являются представительными. См. Раздел 14.2.6,"InnoDB Опции запуска и Системные Переменные" для дополнительной информации о InnoDBСвязанные параметры конфигурации.

Соображения для Устройств хранения

В некоторых случаях производительность базы данных улучшается, если данные все не помещаются в тот же самый физический диск. Помещение файлов журнала на различном диске от данных очень часто выгодно для производительности. Пример иллюстрирует, как сделать это. Это помещает эти два файла данных в различные диски и помещает файлы журнала в третий диск. InnoDB заполняет табличную область, начинающуюся с первого файла данных. Можно также использовать необработанные разделы диска (необработанные устройства) как InnoDB файлы данных, которые могут ускорить ввод-вывод. См. Раздел 14.2.2.3, "Используя Необработанные Разделы диска для Совместно используемой Табличной области".

Предостережение

InnoDB безопасное от транзакции (совместимый ACID) механизм хранения для MySQL, у которого есть фиксация, откат, и возможности восстановления катастрофического отказа защитить пользовательские данные. Однако, это не может сделать так, если базовая операционная система или аппаратные средства не работают как рекламирующийся. Много операционных систем или дисковых подсистем могут задержать или переупорядочить операции записи, чтобы улучшить производительность. На некоторых операционных системах, очень fsync() системный вызов, который должен ожидать до всех незаписанных данных файла, был сброшен, мог бы фактически возвратиться прежде, чем данные были сброшены к устойчивому хранению. Из-за этого катастрофический отказ операционной системы или отключение электричества питания могут уничтожить недавно фиксировавшие данные, или в худшем случае, даже повредить базу данных из-за переупорядоченных операций записи. Если целостность данных важна для Вас, выполните некоторые тесты "получения по запросу разъема" перед использованием чего-либо в производстве. На Mac OS X 10.3 и, InnoDB использует специальное предложение fcntl() метод сброса файла. Под Linux желательно отключить кэш с обратной записью.

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

Предостережение

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

Определение Расположения и Размера для Файлов Табличной области InnoDB

Устанавливать InnoDB файлы табличной области, используйте innodb_data_file_path опция в [mysqld] раздел my.cnf файл опции. На Windows можно использовать my.ini вместо этого. Значение innodb_data_file_path должен быть список одной или более спецификаций файла данных. Если Вы называете больше чем один файл данных, разделяете их точкой с запятой (";") символы:

innodb_data_file_path=datafile_spec1[;datafile_spec2]...

Например, следующая установка явно создает минимально размерную системную табличную область:

[mysqld]innodb_data_file_path=ibdata1:12M:autoextend

Эта установка конфигурирует единственный названный файл данных 12 МБ ibdata1 это авторасширяется. Никакое расположение для файла не дается, так по умолчанию, InnoDB создает это в каталоге данных MySQL.

Размеры определяются, используя K, M, или G буквы суффикса, чтобы указать на модули Кбайта, Мбайта, или Гбайт.

Табличную область, содержащую файл данных 50 МБ фиксированного размера, называют ibdata1 и файл авторасширения 50 МБ называют ibdata2 в данных каталог может быть сконфигурирован как это:

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

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

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

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

Если Вы определяете autoextend опция для последнего файла данных, InnoDB расширяет файл данных, если он исчерпывает свободное пространство в табличной области. Инкремент составляет 8 МБ за один раз по умолчанию. Чтобы изменить инкремент, изменитесь innodb_autoextend_increment системная переменная.

Если диск становится полным, Вы могли бы хотеть добавить другой файл данных на другом диске. Для инструкций реконфигурирования табличной области см. Раздел 14.2.2.2, "Добавление, Удаление, или Изменение размеров InnoDB Файлы данных и Файлы журнала".

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

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

InnoDB создает файлы табличной области в каталоге данных MySQL по умолчанию. Чтобы определить расположение явно, используйте innodb_data_home_dir опция. Например, чтобы использовать два названные файла ibdata1 и ibdata2 но создайте их в /ibdata каталог, сконфигурировать InnoDB как это:

[mysqld]innodb_data_home_dir = /ibdatainnodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
Отметить

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

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

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

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

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

Определение Параметров конфигурации InnoDB

Выборка my.cnf файл для маленьких систем. Предположите, что у Вас есть компьютер с RAM 512 МБ и одним жестким диском. Следующий пример показывает возможные параметры конфигурации в my.cnf или my.ini для InnoDB, включая autoextend атрибут. Пример подходит большинству пользователей, и на Unix и на Windows, кто не хочет распределять InnoDB файлы данных и файлы журнала на несколько дисков. Это создает авторасширяющийся файл данных ibdata1 и два InnoDB файлы журнала ib_logfile0 и ib_logfile1 в каталоге данных MySQL.

[mysqld]# You can write your other MySQL server options here# ...# Data files must be able to hold your data and indexes.# Make sure that you have enough free disk space.innodb_data_file_path = ibdata1:12M:autoextend## Set buffer pool size to 50-80% of your computer's memoryinnodb_buffer_pool_size=256Minnodb_additional_mem_pool_size=20M## Set the log file size to about 25% of the buffer pool sizeinnodb_log_file_size=64Minnodb_log_buffer_size=8M#innodb_flush_log_at_trx_commit=1

Отметьте, что файлы данных должны составить меньше чем 2 Гбайт в некоторых файловых системах. Объединенный размер файлов журнала может составить до 512 Гбайт. Объединенный размер файлов данных должен быть немного больше чем 10 МБ.

Установка Системной Табличной области InnoDB

Когда Вы создаете InnoDB системная табличная область впервые, лучше, чтобы Вы запустили сервер MySQL с командной строки. InnoDB тогда печатает информацию о создании базы данных на экран, таким образом, можно видеть то, что происходит. Например, на Windows, если mysqld располагается в C:\Program Files\MySQL\MySQL Server 5.7\bin, можно запустить это как это:

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

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

Для примера что информация, выведенная на экран InnoDB должен быть похожим, видеть Раздел 14.2.2.1, "Создавая InnoDB Табличная область".

Редактирование MySQL Configuration File

Можно поместить InnoDB опции в [mysqld] группа любого файла опции, который читает Ваш сервер, когда это запускается. Расположения для файлов опции описываются в Разделе 4.2.3.3, "Используя Файлы Опции".

Если Вы устанавливали MySQL на Windows, используя установку и мастера конфигурации, файл опции будет my.ini файл располагался в Вашем каталоге установки MySQL. См. Раздел 2.3.3, "Устанавливая MySQL на Microsoft Windows Используя MySQL Installer".

Если Ваш PC использует загрузчик где C: диск не является загрузочным диском, Ваша единственная опция должна использовать my.ini файл в Вашем каталоге Windows (обычно C:\WINDOWS). Можно использовать SET команда в командной строке в консоли, чтобы напечатать значение WINDIR:

C:\> SET
        WINDIRwindir=C:\WINDOWS

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

mysqld --defaults-file=your_path_to_my_cnf

Выборка my.cnf файл для больших систем. Предположите, что у Вас есть компьютер Linux с RAM на 2 Гбайт и тремя жесткими дисками на 60 Гбайт в путях к каталогам /, /dr2 и /dr3. Следующий пример показывает возможные параметры конфигурации в my.cnf для InnoDB.

[mysqld]# You can write your other MySQL server options here# ...innodb_data_home_dir =## Data files must be able to hold your data and indexesinnodb_data_file_path = /db/ibdata1:2000M;/dr2/db/ibdata2:2000M:autoextend## Set buffer pool size to 50-80% of your computer's memory,# but make sure on Linux x86 total memory usage is < 2GBinnodb_buffer_pool_size=1Ginnodb_additional_mem_pool_size=20Minnodb_log_group_home_dir = /dr3/iblogs## Set the log file size to about 25% of the buffer pool sizeinnodb_log_file_size=250Minnodb_log_buffer_size=8M#innodb_flush_log_at_trx_commit=1innodb_lock_wait_timeout=50## Uncomment the next line if you want to use it#innodb_thread_concurrency=5

Определение Максимального Выделения памяти для InnoDB

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

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

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 дополнительная память.

Настройка других mysqld параметров сервера. Следующие значения типичны и подходят большинству пользователей:

[mysqld]skip-external-lockingmax_connections=200read_buffer_size=1Msort_buffer_size=1M## Set key_buffer to 5 - 50% of your RAM depending on how much# you use MyISAM tables, but keep key_buffer_size + InnoDB# buffer pool size < 80% of your RAMkey_buffer_size=value

На Linux, если ядро включается для большой поддержки страницы, InnoDB может использовать большие страницы, чтобы выделить память для ее пула буферов и дополнительного пула памяти. См. Раздел 8.11.4.2, "Включая Большой Поддержке Страницы".