2015-06-19 4 views
0

Недавно я был назначен на должность администратора db для нашего сервера, поэтому мне нужно учиться, когда я ухожу. Недавно мы обнаружили, что одна из наших таблиц превысила колонку id и должна быть перенесена в bigint. Это для таблицы INNODB, содержащей примерно 301 ГБ данных. Мы запускаем mysql версию 5.5.38. Команда, которую я запускаю для переноса таблицы, -Выполнение таблицы Alter на большой таблице Innodb

ALTER TABLE tb_name CHANGE id id BIGINT NOT NULL;

Я начал миграцию, и теперь мы переходим через 18 часов, но я не вижу, чтобы наше дисковое пространство на сервере вообще менялось, что заставляет меня думать, что ничего не происходит. У нас много памяти, поэтому не стоит беспокоиться, но при запуске «show processlist» все еще отображается следующее состояние сообщения.

копию TMP таблицы

Кто-нибудь есть какие-либо идеи или знают, что я делаю неправильно? Пожалуйста, спросите, нужна ли вам дополнительная информация.

+0

Также нет процессов, работающих с базой данных, кроме таблицы изменений – mcsoup

+1

Возможный дубликат [Изменение больших таблиц InnoDB MySQL] (http://stackoverflow.com/questions/11450089/changing-large-mysql-innodb-tables) –

+0

Я проверил и много места на диске выделено. – mcsoup

ответ

0

Да, это займет время ожидания. Диски, вероятно, вращаются так быстро, как только могут. (SSD используют более быстрые хомяки.)

Вы можете убить ALTER, поскольку все, что он делает, это, как говорится, «копирование в tmp-таблицу», после чего он переименует таблицу tmp в реальную таблицу и отбрасывает старая копия.

Надеюсь, что вы установили ALTER. Иначе он будет расширяться ibdata1, который впоследствии не сжимается.

pt-online-schema-change является альтернативой. Он по-прежнему будет использовать loooooong time (с одним дополнительным «o», потому что он будет немного медленнее). Он будет выполнять эту работу, не блокируя другую деятельность.

Это могло бы быть хорошее время, чтобы проверить все столбцы и индексы в таблице:

  • Может некоторые INTS быть превращен в MEDIUMINT или что-то меньше?
  • Являются ли некоторые из ИНДЕКСОВ неиспользованными?
  • Как насчет нормализации некоторых VARCHAR?
  • Может быть, даже PARTITIONING (но не без веской причины)? Временные ряды - это типичное использование хранилищ данных.
  • Подвести данные и подбросить как минимум старые данные?

Если вы хотите получить дополнительные указания, предоставьте SHOW CREATE TABLE.

Смежные вопросы