Время добавления нового поля в большую таблицу MySQL

Asar
На сайте с 23.08.2004
Offline
320
762

Имеется табличка MySQL InnoDB на 2.500.000 записей.

Тупо добавление нового поля VarChar 96 chars занимает минут 5—10, а в половине случаев PhpMyAdmin и SQLyog попросту зависают в процессе.

Вопрос: это нормальные скорости или мож чего не так делаю? Вроде бы ошибиться негде, но с такими размерами раньше не работал, может, есть особенности какие...

bay_ebook
На сайте с 28.05.2010
Offline
111
#1

Вы бы структуру таблицы привели, индексы в общем - дайте больше информации. Запрос тоже нужен, какие добавляете.

Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#2

Это очень ресурсоёмкая операция. Поэтому нормально, особенно на обычном HDD.

Лучше делать копию БД, делать там это и потом подменять быстро.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Asar
На сайте с 23.08.2004
Offline
320
#3

А последнее время почти постоянно по 504 Gateway timeout вылет...

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#4
Asar:
А последнее время почти постоянно по 504 Gateway timeout вылет...

Пусть вылетает, это nginx вылетает, операция должна выполняться уже самим mysql

edogs software
На сайте с 15.12.2005
Offline
775
#5

Asar,

Часто надо добавлять?

Для понимания происходящего, вот что происходит при добавлении поля

1) Создается новая таблица с той же структурой (включая индексы)

2) В нее копируются старые данные (и соответственно в новой таблице выстраиваются индексы)

Т.е. по сути это копирование с одновременным индексированием всех 2.5млн записей, быстрым это быть не может.

Нередко можно ускорить, если рукотворить процесс. Создать таблицу самому, индексы не ставить, скопировать данные, запустить индексацию.

При этом данные опять же можно не копировать запросом, а тупо скопировать файл таблицы (остановив БД или через mysqlhotcopy) - правда это для innodb не вариант.

В случае innodb можно временно отключить резервную запись всяких логов и транзакций, т.к. вся эта операция копирования еще и бинари логи падает.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
edka
На сайте с 17.01.2010
Offline
208
#6
Asar:

Тупо добавление нового поля VarChar 96 chars занимает минут 5—10, а в половине случаев PhpMyAdmin и SQLyog попросту зависают в процессе.

Новые поля вроде обычно не часто добавляются в базу, особенно скриптами, в приницпе время нормальное для 2,5М записей, завист еще от мощности сервера и как правильно сказали hdd или ssd дисков.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий