После двух лет тестирования и разработки компания Oracle представила первый стабильный релиз СУБД MySQL 5.6, в котором продолжена работа по улучшению масштабируемости, производительности и гибкости. Наиболее значительные улучшения затронули движок InnoDB, в котором появилась поддержка средств полнотекстового поиска, возможность доступа к данным через memcached API, увеличена производительность работы при интенсивной записи данных, а также увеличена масштабируемость при обработке большого числа одновременных запросов. Помимо коммерческой enterprise-версии для загрузки доступен код MySQL Community Server 5.6.10, распространяемый под лицензией GPL.
Ключевые улучшения:
Реализация интерфейса для прямого доступа к таблицам InnoDB в стиле NoSQL-систем с использованием API, манипулирующего парами ключ/значение и совместимого с memcached. Указанный API позволяет сохранять и получать любые значения таблиц без отправки традиционных SQL-запросов и без траты времени на их парсинг и построение плана выполнения запроса. NoSQL API может использоваться для быстрого выполнения простых выборок или обновления значений, в то время как SQL может применяться для тех же таблиц при выполнении более сложных запросов.
Возможность создания в InnoDB полнотекстовых индексов для организации быстрого поиска по словоформам среди текстового контента, хранимого в таблицах InnoDB. Ранее полнотекстовый поиск был доступен только для таблиц MyISAM.
Возможность добавления индексов и изменения структуры таблиц без негативного влияния на выполнение приложений, связанного с ранее выполняемым полным копированием содержимого таблиц и блокировкой операций INSERT, UPDATE и DELETE.
Повышение эффективности оптимизатора запросов, оптимизация процесса выбора результирующего набора значений, сортировки и выполнения запроса. Новые оптимизации Index Condition Pushdown (ICP) и Batch Key Access (BKA) позволяют до 280 раз увеличить пропускную способность выполнения некоторых запросов. Увеличена эффективность выполнения запросов вида "SELECT ... FROM single_table ... ORDER BY non_index_column [DESC] LIMIT [M,]N;". Увеличена производительность запросов "SELECT... LIMIT N" выводящих только часть строк из большой выборки.
Расширены средства диагностики работы оптимизатора, добавлена поддержка EXPLAIN для операций INSERT, UPDATE и DELETE. Результаты работы EXPLAIN теперь могут быть выведены в формате JSON. Новый режим трассировки оптимизатора позволяет проследить за каждым принятым решением в процессе оптимизации запроса.
Дополнительные оптимизации выполнения подзапросов, при которых вложенные запросы вида "SELECT ... FROM table1 WHERE ... IN (SELECT ... FROM table2 ...))" транслируются в более оптимальное представление на стадии до непосредственного выполнения запроса, например, заменяются на более эффективный JOIN.
Расширение реализации системы диагностики PERFORMANCE_SCHEMA, предоставляющей низкоуровневые средства для мониторинга за выполнением запросов и различными событиями при работе СУБД. PERFORMANCE_SCHEMA позволяет детально оценить узкие места при выполнении длительных запросов, а также представить сводную статистику, сгруппированную по запросам, нитям, пользователям, хостам и объектам.
Улучшена реализация движка InnoDB, отмечается рост производительности при выполнении транзакций и при активности с преобладанием операций чтения данных - в некоторых ситуациях ускорение достигает 230%. Проведённый рефакторинг позволил избавиться от узких мест, более оптимально использовать потоки, минимизировать блокировки, обеспечить адаптивный сброс буферов и улучшить логику организации одновременного доступа к данным. Использование нового, более быстрого, алгоритма выявления взаимных блокировок.
Улучшение средств репликации. Добавление механизмов самодиагностики для автоматического выявления сбоев и восстановления после них. Обеспечение защищённости репликаций от нарушения целостности в результате краха сервера. После краха бинарный лог и slave-серверы теперь автоматически восстанавливают корректные позиции в потоке репликации и продолжают реплицирование без необходимости вмешательства администратора. Для контроля целостности данных на всех узлах кластера теперь выполняется проверка по контрольным суммам, которые позволяют автоматически выявлять ошибки и предупреждать о них.
Существенное увеличение производительности репликации при использовании многопоточных slave-систем. В некоторых ситуациях наблюдается пятикратное ускорение репликации. Поддержка внесения в бинарный лог групповых коммитов (Binlog Group Commit), позволяет увеличить производительность репликации за счет отражения изменений в бинарном логе в параллельном режиме, в результате чего коммит со сбросом бинарного лога на диск производится сразу для группы изменений.
Binlog API, позволяющий бесшовно интегрировать MySQL с внешними хранилищами данных и приложениями, путем организации прямой репликации в данные системы. Например, можно подключить свой обработчик, накапливающий статистику по потокам данных в СУБД, при этом экспорт данных в такой обработчик настраивается в виде репликации. Binlog API предоставляет все средства, необходимые для чтения и декодирования используемого в процессе репликации бинарного лога.
Режим отложенной репликации, позволяющий реплицировать данные не сразу, а с определённой задержкой, что позволяет обеспечить защиту от ошибок оператора (например, случайное удаление содержимого таблиц).
Поддержка опций для ручной или автоматической предварительной загрузки содержимого пула буферов InnoDB, что позволяет после перезапуска существенно сократить время "прогрева" сервера (т.е. позволяет сразу использовать ранее накопленный кэш и статистику, без ожидания пока нужные данные накопятся в процессе работы).
Увеличение максимального размера файлов с логами изменений (InnoDB Redo Log) с 4 Гб до 2 Тб, что позволяет повысить производительность при обеспечении работы приложений, интенсивно записывающих данные или выполняющих длительные транзакции (за счет снижения задержек в процессе ротации лога транзакций).
Улучшение безопасности: поддержка указания параметров аутентификации в файле .mylogin.cnf в зашифрованном виде; добавление плагина sha256_password для хранения хэшей паролей с использованием алгоритма SHA-256; добавление в таблицу mysql.user поля со временем истечения действия пароля; новая SQL-функций VALIDATE_PASSWORD_STRENGTH() для оценки надёжности пароля.
Изменение значений по умолчанию для некоторых параметров конфигурации сервера. Например, включение проверки по контрольным суммам в binlog, тюнинг размера кэшей, автоматическая установка значений в зависимости от заданного максимального числа соединений.
Поддержка запуска сервера в режиме только для чтения (опция --innodb-read-only, только для InnoDB).
Поддержка указания дробных значений секунд в функциях TIME, DATETIME и TIMESTAMP для указания микросекунд.
Прекращена поддержка опций "--log", "--log-slow-queries", "--one-thread", "--safe-mode", "--skip-thread-priority", "--table-cache".
MySQL 5.6
После двух лет тестирования и разработки компания Oracle представила первый стабильный релиз СУБД MySQL 5.6, в котором продолжена работа по улучшению масштабируемости, производительности и гТакже по теме: