Spec-Zone .ru
спецификации, руководства, описания, API
|
Первые решения сделать о конфигурации InnoDB включают, как разметить файлы данных InnoDB, и сколько памяти,
чтобы выделить для механизма хранения InnoDB. Вы записываете эти варианты или записывая их в конфигурационном
файле, который MySQL читает при запуске, или определяя их как параметры командной строки в сценарии запуска.
Полный список опций, описаний, и позволенных значений параметра в Разделе
14.2.6,"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_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
Выборка 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
системная табличная область впервые, лучше, чтобы Вы
запустили сервер 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
Табличная область".
Можно поместить 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
WINDIR
windir=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
На 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, "Включая Большой Поддержке Страницы".