Являются ли объемные вставки менее системными, чем несколько одиночных вставок?

У меня есть около 50 сценариев на сервере, вставляющих от 3 до 6 наборов данных каждую секунду. Я обнаружил, что MySQL, в свою очередь, перегружает все системные ресурсы, и иногда он сбивает сервер.

Я думал, что если я соберу 5-минутные запросы и выполню 1 массовую вставку для каждого сценария, это поможет, но поможет ли это с небольшим или большим преимуществом? У кого-нибудь есть опыт перехода на массовые вставки?

Мои таблицы - MyISAM (могут изменить их, если это необходимо и если я не потеряю данные). Версия MySQL: 5.1.56

Спасибо

3 ответа

Решение

Это будет определенная заметная разница. При массовом изменении вы переходите от многих открытых баз данных, запросов, близких к одному открытому, множеству запросов и закрытым. Если вы хотите еще больше ограничить нагрузку, просто запишите многие из них в плоский файл и запустите процесс задания cron, который будет загружен в базу данных в непиковое время.

Объемные вставки намного быстрее. Но в этом случае вы должны заботиться о длине запроса; длина должна быть меньше, чем max_allowed_packet - максимальный размер одного пакета или любой сгенерированной / промежуточной строки.

Некоторые предложения:

  • Делать объемные вставки например INSERT INTO ... VALUES (...),(...),(...);
  • Сделайте хранимые процедуры как массовую вставку. Таким образом, вы вставляете в наборы из 10 или 20. bulk(a1,a2,a3,b1,b2,b3);
  • Взломать: Сделать стол типа Blackhole. Вставить хранимой процедурой. Создайте триггер на этой таблице, который просто вставляет в реальную таблицу. (Это работает и очень быстро!)
Другие вопросы по тегам