Являются ли объемные вставки менее системными, чем несколько одиночных вставок?
У меня есть около 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. Вставить хранимой процедурой. Создайте триггер на этой таблице, который просто вставляет в реальную таблицу. (Это работает и очень быстро!)