MySQL - как избежать высокой нагрузки при переключении схем (баз данных)? - PullRequest
0 голосов
/ 09 июля 2009

У меня есть приблизительно 10 миллионов строк данных в 20 таблицах, которые я обрабатываю раз в месяц.

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

Чтобы сделать новые данные живыми, я попытался:

  1. изменение имени базы данных, которая закодирована в приложении, чтобы указывать на новые данные
  2. запускает большой оператор RENAME TABLE, который добавляет префикс, например СТАРЫЙ к действующим таблицам и перемещает новые таблицы в оперативную базу данных

При обоих методах нагрузка на сервер увеличивается примерно с 0,1 до более 50, а затем постепенно возвращается к нормальной работе. Я хотел бы избежать этого всплеска, если это возможно.

Кэш запросов отключен, я пробовал FLUSH TABLES и перезапускал MySQL сразу после изменения.

Данные считываются (не обновляются) только с моего сайта, поэтому я предполагаю, что это может быть Linux (мы используем RHEL5.3), который буферизует 5 ГБ данных и должен буферизовать новые данные.

Кто-нибудь получил какие-либо предложения о том, как избежать увеличения нагрузки?

1 Ответ

0 голосов
/ 09 июля 2009

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

Я бы порекомендовал вам выполнить ряд типичных запросов к новым таблицам, чтобы «прогреть» кеши, прежде чем переключаться в логике вашего приложения. Можно также реализовать схему, в которой небольшая часть трафика перенаправляется на новые таблицы за короткий промежуток времени, прежде чем переключаться на все запросы.

Не переименовывайте таблицы в MySQL. Это еще больше испортит ваш кеш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...