Функция MySQL Online DDL была официально представлена в версии 5.6 и развита до текущей версии 8.0, претерпев множество изменений и улучшений. В этой статье в основном описывается процесс разработки Online DDL и различия между каждой версией. Фактически, метод INPLACE DDL был добавлен еще в MySQL 5.5, но из-за проблем реализации он по-прежнему блокирует операции INSERT, UPDATE и DELETE. Это одна из причин, по которой ранние версии MySQL долгое время подвергались критике. .
существовать MySQL 5.6 середина,официальный стартподдерживать Болееиз ALTER TABLE Манипулирование типами, чтобы избежать копирования данных, пока существование существует в сети. DDL без блокировки во время процесса DML Операция, реализованная в реальном смысле Online ДДЛ. Однако не все DDL Все операции выполняются онлайн и будут прикреплены позже. MySQL Официальная документация по DDL Краткое описание операций.
приезжать MySQL 5.7,существовать 5.6 На основе были добавлены некоторые новые функции, такие как: добавлена поддержка переименования индексов, поддержка увеличения и уменьшения длины числовых типов, а также поддержка VARCHAR Типа изсуществовать расширение строки и так далее. Но базовая логика реализации и ограничения по сравнению с 5.6 Больших изменений нет.
MySQL 8.0 действительно переработана реализация DDL,Это самое большое улучшение да DDL Операции поддерживают атомарные свойства. Кроме того, онлайн DDL из ALGORITHM В параметр добавлена новая опция: INSTANT. Вам нужно только изменить словарь данных, не нужно копировать данные или перестраивать поверхность. Также нет необходимости добавлять эксклюзивы. MDL Lock, исходные данные таблицы не будут затронуты. весь DDL Процесс завершается практически мгновенно и не будет заблокирован. DML。
учиться Online DDL Сначала поучись, прежде чем DDL из 2 алгоритм copy и inplace。
существовать Оригиналповерхностьвносить изменения в,Нет необходимости создавать временную поверхность,Нет необходимости выполнять копирование данных из процесса. В зависимости от того, следует ли менять формат записи строки,Разделен на две категории:
верно В rebuild Способ достижения Online через кеширование DDL Период из ДМЛ, подожди DDL После завершения DML Нанесите на поверхность, чтобы добиться из.
проиллюстрировать:
Существует 2 типа MySQL середина, уровень поверхности и з Замок. Что-то вроде да, мы обычно говорим иззамок стол, реализованный движком InnoDB, например lock tables … read/write,замок стол имеет большее влияние и обычно не используется. Еще один уровень поверхности из ЗамокдаMDL( metadata lock ), реализованный уровнем Сервера, мы не используем MDL явно, дасуществовать автоматически добавляется библиотекой данных при доступе к одинповерхности, Когда запись вернойповерхности добавлена, удалена, изменена и проверена, добавьте MDL для чтения Замок; когда структура вернойповерхности изменена, добавьте MDL для чтения Замок; MDL Замок, чтение и чтение не являются взаимоисключающими, чтение и запись, запись и запись являются взаимоисключающими. Каковы общие операции «блокировки таблицы»? Создать вторичный индекс (вторичный индексда относится к изиндексу в дополнение к индексу первичного ключа), удалить индекс, переименовать индекс, изменить тип индекса - Нет «запирайте стол». Добавление полей, удаление полей, переименование полей, настройка порядка полей, установка значений полей по умолчанию, удаление значений полей по умолчанию, изменение значений автоприращения, настройка полей для разрешения NULL, настройка полей для запрета NULL —— Не «запирайте стол». Расширенный размер поля Varchar - Нет «запирайте стол». Измените тип данных поля, например, изменив varchar на текст — «заблокировать таблицу».
По умолчанию,MySQLДаподдерживатьonlineизDDLдействоватьиз,существуютонлайнизDDL выполнение оператора из процесса середина,MySQL будет стараться как можно меньше использовать лимит Замков.,Для этого нам не нужны специальные операции.
MySQLсуществоватьвыбиратьизкогда,Используйте Замок как можно реже,Но да не исключает, что он предпочтет использовать Замок. И если я беспокоюсь, что он выберет Замок, и мы изповерхность не сможем ни читать, ни писать.,Очевидно, это не тот результат, который нам нужен,Мы надеемся: если вы выберете Замок, не выполняйте его.,Выйти из выполнения напрямую; выполнить, если Замок не выбран. Чтобы добиться желаемого эффекта,Что делать?
существование может казнить нас в онлайне DDLзаявлениеизкогда,Используйте ключевое слово ALGORITHMиLOCK.,Эти два ключевых слова существуют в операторе DDL в конце.,Просто разделите их запятыми. Примеры следующие:
ALTER TABLE tbl_name ADD COLUMN col_name col_type, ALGORITHM=INPLACE, LOCK=NONE;
При выполнении операций DDL,Опцию АЛГОРИТМ указывать не нужно.,В это время MySQL автоматически выбирает соответствующий режим в порядке INSTANT, INPLACE и COPY. Вы также можете указать ALGORITHM=DEFAULT.,И тот же эффект. Если указана опция АЛГОРИТМ,Но нет слов,Об ошибке будет сообщено напрямую.
Уведомление:
существовать до выполнения OnlineDDL,Это должно осуществляться в непиковые часы работы.,И необходимо подтвердить отсутствие неотправленных транзакций, замков и другой информации об ожидании исполнения. Вы можете использовать следующий оператор изSQL, чтобы проверить, есть ли в да транзакции и Замок и другая информация.
select * from information_schema.innodb_locks;
select * from information_schema.innodb_trx;
select * from information_schema.innodb_lock_waits;
select * from information_schema.processlist;
Операции DDL включают в себя верданные библиотеки структуры поверхности из модификаций.,Например, добавьте /Удалить столбец, Изменить определение столбца, добавить/удалить индекс и т. д. существуют предыдущая версия середина,При выполнении этих операций DDL вам необходимо определить всю систему.,Доступность проверенных библиотек пострадала негативно. поэтому,Внедрение существующего онлайн-DDL стало важным требованием для повышения гибкости и производительности системы.
MySQL 5.7 реализует существующие онлайн-функции DDL за счет улучшений механизма хранения InnoDB. Ниже приведены основные особенности этой функции:
Реализация существующей линейной функциональности DDL включает в себя следующие ключевые этапы оптимизации:
Хотя MySQL 5.7 реализует функциональность DDL в примерном соответствии с опытом, но все же существуют некоторые ограничения и соображения:
Все данные в этой статье взяты из MySQL Официальная документация,Продолжить здесьодиннаборсерединаизаккуратныйи Подвести итог:
https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl-operations.html
https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html
https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html
Сочетая приведенный выше формат изповерхности, MySQL текущий DDL из режима выполнения резюмируется следующим образом:
1. INSTANT DDL да MySQL 8.0 представлятьизновые возможности,текущийподдержаниеменьший диапазон,включать:
2. существоватьосуществлять DDL Во время работы MySQL Внутреннее верно Ю ALGORITHM из Стратегия выбора:
Если пользователь явно указывает АЛГОРИТМ, используйте указанную пользователем опцию;
Если пользователь не укажет, то если операция поддерживает INPLACE, предпочтение будет отдано INPLACE, в противном случае будет выбрана COPY;
текущий Нетподдерживать INPLACE издействовать В основном включают:
3. Мы часто говорим из Online DDL, по сути, даот DML Описание операции из угла если DDL Операция не блокируется DML операция, то это DDL Да Online из。текущий Нет Online из DDL На самом деле их уже относительно немного, в основном в том числе:
Более подробные примеры можно найти в официальном документе по указанному выше адресу.
Наконец, давайте обсудим некоторые очень запутанные вопросы:
Online DDL Это будет Замокповерхность? Чтобы ответить на этот вопрос, надо сначала уточнить значение слова «Замокповерхность» из. много MySQL Пользователи зачастую существующейповерхности не могут нормально работать. DML В то время я чувствовал, что да Замокповерхность на самом деле слишком широка и действительно может повлиять на DML Операции из Замок включают как минимум следующие типы (по умолчанию: InnoDB поверхность):
Замок MDL
замок стола
блокировка строки
GAP Замок
что кроме Замок MDLдасуществовать Server За исключением слоя плюс, остальные три дасуществовать. InnoDB Слой плюс из. Конкретная логика из плюс Замок здесь не будет подробно описана, но необходимо прояснить: все операции (независимо от да) DDL Ну давай же DML Ну давай же Запросзаявление)Всенуждаться Возьми это первым Server слойиз Замок леев, а затем возьми это InnoDB Слой из определенной потребности из Замок.
один DDL из Основной процесс выглядит следующим образом:
Так существование действительно работает DDL Во время операции, правда, не будет "Замокповерхности", но если будет существовать, то первый этап займет MDL X Замокповерхность невозможно получить нормально, тогда возможно, что из действительно знает "Замокповерхность". Один простой пример выглядит следующим образом:
# session 1
select sleep(500) from mytest.t1;
# session 2
optimize table mytest.t1;
# session 3
select * from mytest.t1;
session 1 смоделировал один медленный запрос, а затем session 2 начать DDL Операция, не может быть получена MDL X Замок, ждём пока середина. в это время session 3 Необходимо выполнить один запрос, но выяснилось, что он не может быть выполнен. На самом деле существуют session 1 Прежде чем закончить, таблица t1 из Все операции недоступны. Также можно сказать, что поверхность. t1 “Замокповерхность”Понятно。MySQL 5.7/8.0 Можно включить performance_schema Прямой запрос в случае из metadata_locks поверхность. Алибаба Облако RDS 5.6 Добавлена новая версия I_S.MDL_INFO стол, предусмотрен MDL запрос.
MySQL [performance_schema]> select * from metadata_locks where OBJECT_NAME = 't1';
+-------------+---------------+-------------+-------------+-----------------------+----------------------+---------------+-------------+-------------------+-----------------+----------------+
| OBJECT_TYPE | OBJECT_SCHEMA | OBJECT_NAME | COLUMN_NAME | OBJECT_INSTANCE_BEGIN | LOCK_TYPE | LOCK_DURATION | LOCK_STATUS | SOURCE | OWNER_THREAD_ID | OWNER_EVENT_ID |
+-------------+---------------+-------------+-------------+-----------------------+----------------------+---------------+-------------+-------------------+-----------------+----------------+
| TABLE | mytest | t1 | NULL | 140730442220576 | SHARED_READ | TRANSACTION | GRANTED | sql_parse.cc:5916 | 1083 | 24 |
| TABLE | mytest | t1 | NULL | 140730576178368 | SHARED_NO_READ_WRITE | TRANSACTION | PENDING | sql_parse.cc:5916 | 1091 | 3 |
| TABLE | mytest | t1 | NULL | 140730374843168 | SHARED_READ | TRANSACTION | PENDING | sql_parse.cc:5916 | 1092 | 3 |
+-------------+---------------+-------------+-------------+-----------------------+----------------------+---------------+-------------+-------------------+-----------------+----------------+
3 rows in set (0.00 sec)
После уточнения вышеизложенного понятия из,Вернемся к нашему вопросу,Online DDL да Нетда Нет Замокповерхность? Если вам нужно ответить,Тогда я могу только сказать,Онлайн-DDL небезопасен,Даже Нетда Можетслучайныйизосуществлять。Проволоканачальстводействовать Ну давай женуждатьсясуществовать Будьте осторожны в периоды низкой деловой активности.действовать。
Концептуально INPLACE и Online да Вещи в двух разных измерениях. КОПИРОВАТЬ и INPLACE означает изда DDL Внутреннюю логику выполнения можно просто понять так: дасуществовать Server Слой операции, INPLACE дасуществовать InnoDB Слой операции. И пользователей больше беспокоит Online или нет, обычно связано только с одним вопросом: разрешен ли параллелизм DML。
Два основных вывода:
Как мы упоминали ранее, MySQL Внутреннее верно Ю DDL из ALGORITHM Есть два варианта: ВСТАВИТЬ и COPY(8.0 Добавлен МГНОВЕННЫЙ, но да имеет меньшую дальность применения). КОПИРОВАТЬ Алгоритм относительно прост для понимания: создайте временную поверхность, а потом Оригиналповерхностьизданныекопироватьво временную таблицасередина и, наконец, замените исходную поверхность временной поверхностью. Верно на приведенный выше изшаг, в связи с необходимостью копирования оригинальной поверхностиизданныево временную таблицысередина, поэтому она обязательно будет занимать дополнительные изданные места.
Что Что?верно Вподдерживать INPLACE Алгоритм DDL, не требуется ли дополнительное пространство?
Ответ: Да. На самом деле, причина, по которой я задаю этот вопрос, заключается в том, что,Ну давай жепотому чтодляверно INPLACE В моем понимании есть отклонение. Проще говоря: ВСТАВИТЬ Описание издаповерхности, а не даданных файла. Если не создать временную поверхность, то всё да INPLACE из。
сделано, многие INPLACE DDL перестроят поверхность (будут созданы временные файлы данных),Поэтому потребуется дополнительное пространство.,Например:
Навыки обновляются благодаря обмену ими, и каждый раз, когда я получаю новые знания, мое сердце переполняется радостью. Искренне приглашаем вас подписаться на публичный аккаунт 『
Код на тридцать пять
』 , для получения дополнительной технической информации.