Spec-Zone .ru
спецификации, руководства, описания, API
|
У MySQL есть заслуженная репутация быть удобным в работе и поставить производительность и масштабируемость. В предыдущих версиях MySQL MyISAM был механизмом хранения значения по умолчанию. В нашем опыте, большинство пользователей, никогда изменяемых настройки по умолчанию. С MySQL 5.5 InnoDB становится механизмом хранения значения по умолчанию. Снова, мы ожидаем, что большинство пользователей не будет изменять настройки по умолчанию. Но из-за InnoDB поставляют настройки по умолчанию, пользователи преимуществ ожидают от их RDBMS: Транзакции ACID, Ссылочная целостность, и Восстановление Катастрофического отказа. Давайте исследовать, как использование таблиц InnoDB улучшает Вашу жизнь как пользователя MySQL, DBA, или разработчика.
В первых годах роста MySQL ранние веб-приложения не продвигали пределы параллелизма и доступности. В 2010 объем жесткого диска и емкость памяти и отношение производительности/цены все прошли через крышу. Пользователи, продвигающие границы производительности MySQL, заботятся много о восстановлении надежности и катастрофического отказа. Базы данных MySQL являются большими, занятыми, устойчивыми, распределяются, и важны.
InnoDB поражает зону наилучшего восприятия этих главных пользовательских приоритетов. Тенденция использования механизма хранения сместилась в пользу более масштабируемого InnoDB. Таким образом MySQL 5.5 является логическим выпуском перехода, чтобы сделать InnoDB механизмом хранения значения по умолчанию.
MySQL продолжает работать над адресацией вариантов использования, которые прежде потребовали таблиц MyISAM. В MySQL 5.6 и выше:
InnoDB может выполнить полнотекстовый поиск, используя FULLTEXT
индексируйте тип. См. Раздел 14.2.3.12.3,"FULLTEXT
Индексирует" для деталей.
InnoDB теперь выполняет лучше с рабочими нагрузками чтения главным образом или
только для чтения. Автоматическая оптимизация применяется к запросам InnoDB в режиме автоматической
фиксации, и можно явно отметить транзакции как только для чтения с синтаксисом START TRANSACTION READ ONLY
. См. Раздел
14.2.4.2.3, "Оптимизация для Транзакций Только для чтения" для деталей.
Приложения, распределенные на носителях только для чтения, могут теперь использовать таблицы InnoDB. См. Раздел 14.2.5.1, "Поддержка Носителей Только для чтения" для деталей.
Запускаясь с MySQL 5.5.5, механизмом хранения значения по умолчанию для новых таблиц является InnoDB. Это
изменение применяется к недавно составленным таблицам, которые не определяют механизм хранения с пунктом такой
как ENGINE=MyISAM
. (Данный это изменение поведения значения по умолчанию, MySQL 5.5
мог бы быть логической точкой, чтобы оценить, могли ли Ваши таблицы, которые действительно используют MyISAM,
извлечь выгоду от переключения до InnoDB.)
mysql
и information_schema
базы данных, та реализация
некоторые из внутренностей MySQL, все еще используют MyISAM. В частности невозможно переключить таблицы
предоставления, чтобы использовать InnoDB.
Если Вы используете MyISAM
таблицы, но не связываются к ним для технических причин,
Вы сочтете много вещей более удобными, когда Вы будете использовать InnoDB
таблицы
в MySQL 5.5:
Если Ваш сервер отказывает из-за аппаратных средств или проблемы программного обеспечения, независимо от того, что происходило в базе данных в то время, Вы не должны сделать ничего специального после перезапуска базы данных. Восстановление катастрофического отказа InnoDB автоматически завершает любые изменения, которые фиксировались перед временем катастрофического отказа, и отменяет любые изменения, которые были в процессе, но не фиксировали. Только перезапустите и продолжайте, где Вы кончили. Этот процесс теперь намного быстрее чем в MySQL 5.1 и ранее.
Таблица кэшей пула буферов InnoDB и индексирует данные, поскольку к данным получают доступ. Часто используемые данные обрабатываются непосредственно из памяти. Этот кэш применяется к очень многим типам информации, и ускоряет обработку так, что выделенные серверы баз данных присваивают до 80 % своей физической памяти к пулу буферов InnoDB.
Если Вы разделяете связанные данные на различные таблицы, можно установить внешние ключи, которые осуществляют ссылочную целостность. Обновите или удалите данные, и связанные данные в других таблицах обновляются или удаляются автоматически. Попытайтесь вставить данные во вторичную таблицу без соответствующих данных в первичной таблице, и неправильные данные выгоняются автоматически.
Если данные становятся поврежденными на диске или в памяти, механизм контрольной суммы предупреждает Вас к поддельным данным прежде, чем Вы будете использовать это.
Когда Вы разрабатываете свою базу данных с соответствующими столбцами первичного ключа для
каждой таблицы, операции, включающие те столбцы, автоматически оптимизируются. Это очень быстро, чтобы
сослаться на столбцы первичного ключа в WHERE
пункты, ORDER BY
пункты, GROUP BY
пункты, и операции
соединения.
Вставляет, обновления, удаляет, оптимизируются автоматическим механизмом, названным буферизацией изменения. InnoDB не только позволяет параллельный доступ для чтения и доступ для записи к той же самой таблице, это кэширует измененные данные, чтобы оптимизировать дисковый ввод-вывод.
Выигрыши в производительности не ограничиваются гигантскими таблицами с продолжительными запросами. То, когда к тем же самым строкам получают доступ много раз от таблицы, функция, названная Адаптивным Хешем, Индексируют, вступает во владение, чтобы сделать эти поиски еще быстрее, как будто они вышли из хэш-таблицы.
Если Вы использовали InnoDB
в течение долгого времени Вы уже знаете о функциях как
транзакции и внешние ключи. В противном случае читайте о них всюду по этой главе. Короче говоря:
Определите первичный ключ для каждой таблицы, используя наиболее часто запрашиваемый столбец или столбцы, или значение anauto-инкремента, если нет никакого очевидного первичного ключа.
Охватите идею соединений, где данные вытягивают от многократных таблиц, основанных на идентичных Значениях идентификаторов от тех таблиц. Для быстрой производительности соединения определите внешние ключи на объединяющих столбцах, и объявите те столбцы с тем же самым типом данных в каждой таблице. Внешние ключи также распространяют, удаляет или обновляет ко всем таблицам, на которые влияют, и предотвратите вставку данных в дочерней таблице, если соответствующие ID не присутствуют в родительской таблице.
Выключите автоматическую фиксацию. Фиксация сотен времен в секунду помещает прописную букву в производительность (ограниченный скоростью записи Вашего устройства хранения).
Групповые наборы связанных операций DML в транзакции,
заключая в скобки их с START TRANSACTION
и COMMIT
операторы. В то время как Вы не хотите фиксировать слишком часто,
Вы также не хотите выпускать огромные пакеты INSERT
, UPDATE
,
или DELETE
операторы, которые работают в течение многих часов без фиксации.
Прекратите использовать LOCK TABLE
операторы. InnoDB
может обработать многократные сеансы все чтение и запись в ту же самую таблицу сразу, не жертвуя
надежностью или высокой производительностью. Чтобы получить монопольный доступ для записи к ряду строк,
используйте SELECT ... FOR UPDATE
синтаксис, чтобы заблокировать только
строки Вы намереваетесь обновить.
Включите innodb_file_per_table
опция, чтобы поместить
данные и индексирует для отдельных таблиц в отдельные файлы, вместо в единственной гигантской системной
табличной области. (Эта установка обязана использовать некоторые из других функций, таких как
табличное сжатие и быстрое
усечение.)
Оцените, извлекают ли Ваши данные и схемы доступа выгоду из новой табличной функции
сжатия InnoDB (ROW_FORMAT=COMPRESSED
на CREATE TABLE
оператор. Можно сжать таблицы InnoDB, не жертвуя возможностью чтения-записи.
Выполните свой сервер с опцией --sql_mode=NO_ENGINE_SUBSTITUTION
предотвратить таблицы, создаваемые с различным механизмом хранения, если есть проблема с той,
определенной в ENGINE=
пункт CREATE TABLE
.
Если у Вас есть опыт с InnoDB, но от MySQL 5.1 или ранее, читайте о последних улучшениях InnoDB в Разделе 14.2.4.2,"InnoDB
Производительность и Улучшения Масштабируемости" и Раздел
14.2.5,"InnoDB
Функции Гибкости, Простоты использования и Надежности".
Короче говоря:
Можно сжать таблицы, и связанный индексирует.
Можно создать, и отбрасывание индексирует с намного меньшим количеством производительности или воздействия доступности чем прежде.
Усечение таблицы очень быстро, и может освободить дисковое пространство для операционной системы к повторному использованию, вместо того, чтобы освободить пространство в пределах системной табличной области, которую только мог снова использовать InnoDB.
Расположение хранения для табличных данных более эффективно для BLOB и длинных
текстовых полей, с DYNAMIC
формат строки.
Можно контролировать внутренние работы механизма хранения, запрашивая INFORMATION_SCHEMA
таблицы.
Можно контролировать детали производительности механизма хранения, запрашивая performance_schema
таблицы.
Есть много много улучшений производительности. В частности восстановление катастрофического отказа, автоматический процесс, который делает все данные непротиворечивыми, когда база данных перезапускается, быстро и надежно. (Теперь очень намного быстрее чем долговременный InnoDB пользователи привыкли к.), Чем больше база данных, тем более существенный ускорение.
Самые новые технические характеристики являются автоматическими, или самое большее требуют установки
значения для параметра конфигурации. Для получения дополнительной информации см. Раздел
14.2.4.2,"InnoDB
Производительность и Улучшения
Масштабируемости". Для InnoDB-специфичных настраивающих методов можно применяться в
своем коде программы, видеть Раздел 8.5, "Оптимизируя
для InnoDB
Таблицы". Усовершенствованные пользователи
могут рассмотреть Раздел 14.2.6,"InnoDB
Опции запуска и Системные Переменные".
Даже прежде, чем завершить Ваше обновление от MySQL 5.1 или ранее к MySQL 5.5 или выше, можно предварительно
просмотреть, работают ли Ваш сервер базы данных или приложение правильно с InnoDB как механизм хранения значения
по умолчанию. Чтобы установить InnoDB как механизм хранения значения по умолчанию с более ранним выпуском MySQL,
любой определяет на командной строке --default-storage-engine=InnoDB
, или добавьте
к Вашему my.cnf
файл default-storage-engine=innodb
в
[mysqld]
раздел, затем перезапустите сервер.
Начиная с изменения механизма хранения значения по умолчанию только влияет на новые таблицы, поскольку они
создаются, выполняют всю Вашу установку приложения и устанавливают шаги, чтобы подтвердить, что все
устанавливает должным образом. Затем осуществите все функции приложения, чтобы удостовериться вся загрузка
данных, редактирование, и запросы работы функций. Если таблица положится на некоторую MyISAM-специфичную
функцию, то Вы получите ошибку; добавьте ENGINE=MyISAM
пункт к CREATE TABLE
оператор, чтобы избежать ошибки. (Например, таблицы, которые
полагаются на полнотекстовый поиск, должны быть таблицами MyISAM, а не InnoDB.)
Если Вы не принимали преднамеренное решение относительно механизма хранения, и Вы только хотите предварительно
просмотреть, как определенные таблицы работают, когда они создаются под InnoDB, дают команду ALTER TABLE table_name ENGINE=InnoDB;
для каждой таблицы. Или, чтобы выполнить
тестовые запросы и другие операторы, не нарушая исходную таблицу, сделайте копию как так:
CREATE TABLE InnoDB_Table (...) ENGINE=InnoDB AS SELECT * FROM MyISAM_Table;
С тех пор есть очень много улучшений производительности в InnoDB в MySQL 5.5 и выше, чтобы получить истинную идею производительности с полным приложением при реалистической рабочей нагрузке, установить последний сервер MySQL и выполнить сравнительные тесты.
Протестируйте полный жизненный цикл приложения, от установки, посредством тяжелого использования, и перезапуска сервера. Уничтожьте серверный процесс, в то время как база данных занята, чтобы моделировать перебой в питании, и проверить, что данные восстанавливаются успешно, когда Вы перезапускаете сервер.
Протестируйте любые конфигурации репликации, особенно если Вы используете различные версии MySQL и опции на ведущем устройстве и ведомых устройствах.
Знать, каково состояние InnoDB, делаете ли Вы что - тестируя с более старым MySQL или при всестороннем тестировании с последним MySQL:
Дайте команду SHOW ENGINES;
видеть все различные
механизмы хранения MySQL. Искать DEFAULT
в строке InnoDB.
Если InnoDB не присутствует вообще, у Вас есть a mysqld
двоичный файл, который был скомпилирован без поддержки InnoDB и Вы
должны получить различный.
Если InnoDB присутствует, но отключенный, возвратитесь через свои опции запуска и
конфигурационный файл и избавьтесь от любого skip-innodb
опция.