Изменить столбец в таблице 4M + записей, запущенной на производстве - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь добавить столбец в таблицу 4M + записей, запущенную на производстве, используя phpmyadmin

Вот что происходит на mysql> SHOW FULL PROCESSLIST;:

Query   |  670 | copy to tmp table               | ALTER TABLE `table_name`  ADD `new_column` VARCHAR(1) NULL DEFAULT NULL  AFTER `other_column`

Sleep   |  671 |                                 | NULL

[... And here all inserts attempts to that table are stacking ...]

Он вылетает после 13 минут:

200509  0:44:41  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 71728461312
InnoDB: Doing recovery: scanned up to log sequence number 71733704192
[...]

Как добавить этот столбец ...: (

1 Ответ

1 голос
/ 09 мая 2020

Для innodb_buffer_pool_size было выделено слишком много памяти по сравнению с имеющимися 16 ГБ, но оставшиеся 2 ГБ также были использованы.

Соединения используют определенный объем памяти. ALTER TABLE блокирует вставки ROM таблицы, поэтому вставки выстраиваются в очередь, используя больше памяти. Таблица изменения использует разумный объем памяти.

Уменьшение размера буферного пула до 10 ГБ или около того может дать достаточно доступной оперативной памяти. Посмотрите результаты mysqltuner , которые так вычисляют RAM. Прежде чем просматривать другие рекомендации, подождите день или около того, пока служба не заработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...