У меня есть сервер MySQL 5.1 с базой данных приблизительно 450 таблиц, занимающий 4 ГБ. Подавляющее большинство этих таблиц (все, кроме 2) являются MyIsam. По большей части это нормально (транзакции не нужны), но приложение набирает трафик, и на некоторые таблицы влияют блокировки таблиц при обновлении. Вот почему 2 таблицы сейчас являются InnoDB.
Преобразование в таблицы меньшего размера (100 тыс. Строк) совсем не занимает много времени, вызывая минимальное время простоя. Однако некоторые из моих таблиц отслеживания приближаются к 50 миллионам строк. Есть ли способ ускорить ALTER TABLE...ENGINE InnoDB
на больших столах? А если нет, то есть ли другие способы преобразования, минимизирующие время простоя в этих таблицах с интенсивной записью?
mysql-5
storage-engine
Дерек Дауни
источник
источник
Ответы:
Позвольте мне начать с того, что я ненавижу ALTER. Это зло, ИМХО.
Скажем, это ваша текущая схема таблицы -
Вот путь, который я рекомендую -
Создайте новый объект таблицы, который заменит старый:
Вставьте все строки из старой таблицы по имени в новую таблицу:
Дым проверяет вашу миграцию:
Поменяйте местами имена таблиц, чтобы вы могли сохранять резервные копии на случай, если потребуется откат.
Перейдите к регрессионному тестированию.
Такой подход становится все более предпочтительным с таблицами с несколькими индексами и миллионами строк.
Мысли?
источник
ALTER TABLE
займет больше времени, чемINSERT INTO...SELECT
на 50 миллионов строк?1) Защита от потери является функцией паранойи. Всегда делайте резервную копию. Если вы действительно параноик, сделайте резервную копию, а затем восстановите ее.
2) На этой странице руководства MySQL есть инструкции по преобразованию типов таблиц.
3) PostgreSQL выполняет полнотекстовый поиск , движок Sphinx, кажется, делает это для MySQL
источник
Оптимизировать весь сервер (конфигурация памяти, кэши, индексы) в X раз проще, когда используется только один движок. Смешивание myisam с innodb в больших базах данных всегда застревает в какой-то момент, когда компромисс заставляет оба двигателя работать хорошо (но не отлично) :)
Я рекомендую Вам заинтересоваться некоторыми специализированными полнотекстовыми поисковыми системами, такими как sphinx , lucene ( solr ) и избавиться от них на уровне базы данных.
источник