Как добавить больше членов в мой столбец ENUM-типа в MySQL для таблицы размером более 40 миллионов строк? - PullRequest
0 голосов
/ 12 февраля 2019

У меня размер таблицы 40 миллионов строк, и я хочу изменить столбец перечисления таблицы Aurora MySQL RDS Database V5.6.10, чтобы добавить больше.Эта таблица часто обновляется.Кто-нибудь когда-нибудь пытался изменить такие таблицы раньше?Если да, не могли бы вы рассказать подробнее об опыте?

Структура таблицы:

CREATE TABLE `tee_sizes` (
id bigint auto_increment,
customer_id bigint,
tee-size enum('small', 'large', 'x-large'),
created_at  timestamp NOT NULL default CURRENT_TIMESTAMP(),
updated_at  timestamp NOT NULL default CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
PRIMARY KEY(id)
) ENGINE=InnoDB AUTO_INCREMENT=36910751 DEFAULT CHARSET=utf8;

Я хочу добавить «xx-large» к размеру тройника колонки.

Будет ли время простоя при этом?

1 Ответ

0 голосов
/ 12 февраля 2019

MySQL 5.6 должен разрешать InnoDB онлайн DDL без какого-либо простоя в этой таблице, и параллельные запросы должны все еще работать в этой таблице при изменении.

   ALTER TABLE tee_sizes MODIFY COLUMN `tee-size` enum('small', 'large', 'x-large', 'new-item'),
   ALGORITHM=INPLACE, LOCK=NONE;

ALGORITHM=INPLACE, LOCK=NONE заставит MySQL выполнить на запрошенном уровне параллелизма без простоя.Если ваша версия MySQL не выполняется, то запрошенный уровень параллелизма недоступен, то есть ALGORITHM=INPLACE, LOCK=NONE необходимо изменить.

см. демо

Отредактировано из-за комментария:

Подождите .. Итак, это вызывает любые блокировки?ALGORITHM = INPLACE, LOCK = NONE заставит MySQL выполнить (если разрешено) без простоя, если ваш MySQL не выполняется, это означает, что это невозможно сделать с помощью ALGORITHM = INPLACE, LOCK = NONE. Это утверждение сбивает с толку.

Нет, он не блокирует копирование / вставку из руководства

Вы можете управлять аспектами операции DDL, используя предложения ALGORITHM и LOCK оператора ALTER TABLE.Эти предложения помещаются в конце оператора, отделенные от спецификаций таблицы и столбца запятыми... Чтобы случайно не сделать таблицу недоступной для чтения, записи или того и другого, укажите в операторе ALTER TABLE предложение, такое как LOCK = NONE` (разрешить чтение и запись) или LOCK = SHARED (разрешить чтение). Операция немедленно останавливается, если запрошенный уровень параллелизма недоступен.

...