Таблица tmp не увеличивается при запуске ALTER для добавления нового столбца

У меня есть таблица на 25 ГБ, к которой я должен добавить столбец.

Я запускаю скрипт, и когда я его выполняю, я вижу временную таблицу в каталоге данных, но она остается на уровне около 480K. Я вижу в списке процессов, что ALTER работает и нет никаких проблем.

Если я убиваю скрипт после длительного периода активности, то в списке процессов запрос остается в состоянии "убито", а файл tmp начинает расти, пока запрос не будет ВСЕГДА уничтожен (т. Е. Из состояния "убит" в списке процессов исчезает). из списка процессов в целом).

Когда я запускаю следующее (перед тем как убить запрос):

select * from global_temporary_tables\G

он также не показывает добавляемых строк.

Есть ли что-нибудь еще, что я могу сделать?

1 ответ

Во-первых, то, что может показать ваш выходной отчет "ps", не имеет ничего общего. Не полагайтесь на то, что говорит "ps": оно включает устаревшие данные.

Если процесс был прерван (SIGKILL, а не SIGTERM), я гарантирую, что он больше не доставляет никаких результатов куда-либо. Если это был SIGTERMed, это зависит от того, какие обработчики сигналов вы подключили. Я рискну предположить, что вы не зарегистрировали никаких обработчиков сигналов.

Большинство производственных СУБД настроены на хранение кусками. Получено X пространства, которое может содержать "слабую" комнату, которая позволяет добавлять строки и / или столбцы (я НЕ говорю, что оба механизма идентичны). То, что что-то не выросло таким образом, который вы могли бы воспринимать, не означает, что изменения не были внесены. Почему бы не проверить словарь данных, опрашивая текущую структуру таблицы.

Вы совершили свои изменения? В некоторых СУБД операции DDL рассматриваются как события committable/rollbackable (yecch).

Другие вопросы по тегам