2015-08-03 2 views
1

Я помогаю запустить довольно большой веб-сайт электронной почты, поскольку мы сталкиваемся с проблемами добавления полей в таблицы InnoDB из-за размера наших данных.Добавление новых полей в большую базу MYSQL

Его даже не «тот» большой ... смотрящий около 385 000 строк, размером 500 МБ, но теперь, когда мы добавляем новое поле, вся таблица блокируется, и я оставил ее бежать, пока я осмеливаюсь, но после того, как он заблокировал его, запрос на реальном сайте. Это также вызывает «блокировку метаданных» по другим запросам.

Его работа на достойном сервере, и хосты говорят, что это всего лишь одна из тех вещей, в которой он делает то, что (MYSQL) предназначен для этого.

Итак, моя идея не работает, чтобы создать новую таблицу с изменениями в полях, а затем импортировать данные, но я не очень доволен этим как решение, так как это означает, что мы не могли бы срочная разработка в течение дня, если потребуется.

Есть ли у кого-нибудь идеи о том, как обойти это, пожалуйста?

спасибо.

EDIT:

Спасибо за ответы до сих пор ребята, чтобы ответить на некоторые из вопросов;

1) «Дев работают на живом сайте?» - У нас есть среда разработки, но рано или поздно вам нужно внести эти изменения в жизнь! Это то, что я имел в виду.

2) «Дублирование работы MYSQL?» - из других поисков в Google было предложено хорошее решение для создания пустой таблицы, внесения изменений в нужные вам поля, а затем повторного импорта старых данных (затем отбросить старую таблицу). Не уверен, что это быстрее/лучше, чем просто позволить MYSQL разыгрывать создание таблицы tmp?

3) @Uueerdo - его довольно простая настройка, таблица InnoDB с ключами. Его таблица, в которой хранятся все заполненные детали корзины клиентов (у нас есть плавающая таблица для текущих заказов) и постоянно обращается к ней (добавляются новые записи, проверяются заказы на обслуживание клиентов, отслеживание клиентов и т. Д.). Мне нужно добавить 4-5 новых полей в эту таблицу, и когда я передаю «ALTER», он просто блокирует таблицу и, следовательно, запускает очереди над вышеупомянутыми запросами, которые нуждаются в этих данных.

+0

В дополнение к тому, что Богдан Бурим, еще одна вещь, чтобы ускорить процесс обновления, который мы делаем в нашем корпусе, заключается в том, чтобы сделать новые поля обнуляемыми, когда мы можем. Это значительно ускоряет работу MS SQL Server. –

+2

«... поскольку это означает, что мы не смогли выполнить срочную работу по разработке в течение дня, если потребуется». Вы выполняете разработку на реальном сервере ?! – Uueerdo

+0

Также, какова ваша текущая структура и какие изменения вы пытаетесь сделать? И как долго «пока я осмелюсь»? – Uueerdo

ответ

2

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

Да, это печально, что служба недоступна, но это лучший способ, поскольку у вас есть один сервер БД.

О создании отдельной таблицы и переносе данных самостоятельно - я не знаю ваших данных, но похоже, что вы делаете то, что MySQL делает сам по себе, поэтому обычно не нужно делать такие вещи самостоятельно.

Кроме того, после запуска выполнения ALTER вы можете открыть другое соединение MySQL и запустить SHOW FULL PROCESSLIST, чтобы узнать, как выполняется выполнение вашего запроса.

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