Таблица tmp не увеличивается при запуске ALTER для добавления нового столбца
У меня есть таблица на 25 ГБ, к которой я должен добавить столбец.
Я запускаю скрипт, и когда я его выполняю, я вижу временную таблицу в каталоге данных, но она остается на уровне около 480K. Я вижу в списке процессов, что ALTER работает и нет никаких проблем.
Если я убиваю скрипт после длительного периода активности, то в списке процессов запрос остается в состоянии "убито", а файл tmp начинает расти, пока запрос не будет ВСЕГДА уничтожен (т. Е. Из состояния "убит" в списке процессов исчезает). из списка процессов в целом).
Когда я запускаю следующее (перед тем как убить запрос):
select * from global_temporary_tables\G
он также не показывает добавляемых строк.
Есть ли что-нибудь еще, что я могу сделать?
1 ответ
Во-первых, то, что может показать ваш выходной отчет "ps", не имеет ничего общего. Не полагайтесь на то, что говорит "ps": оно включает устаревшие данные.
Если процесс был прерван (SIGKILL, а не SIGTERM), я гарантирую, что он больше не доставляет никаких результатов куда-либо. Если это был SIGTERMed, это зависит от того, какие обработчики сигналов вы подключили. Я рискну предположить, что вы не зарегистрировали никаких обработчиков сигналов.
Большинство производственных СУБД настроены на хранение кусками. Получено X пространства, которое может содержать "слабую" комнату, которая позволяет добавлять строки и / или столбцы (я НЕ говорю, что оба механизма идентичны). То, что что-то не выросло таким образом, который вы могли бы воспринимать, не означает, что изменения не были внесены. Почему бы не проверить словарь данных, опрашивая текущую структуру таблицы.
Вы совершили свои изменения? В некоторых СУБД операции DDL рассматриваются как события committable/rollbackable (yecch).