@kirill-93

Multi insert. Чем плохо большое значение max_allowed_packet в mysql?

По крону гружу со стороннего апи продукты в базу. Чтобы не делать много маленьких вставок, вставляю сразу 200 товаров через multi insert. Именно 200, потому что больше не влезает в запрос, упирается в ограничение max_allowed_packet (64M). При это размер 200 товаров может быть разный (длина описания и тп), то есть варьируется.
Вопрос:
Какие минусы меня ожидают, если я, например увеличу размер этого параметра в 5 раз и буду вставлять разом не 200, а 1000 товаров? Какие минусы с точки зрения большого значения и какие минусы с точки зрения большого количества записей на один инсёрт. Везде пишут, что вставлять много записей разом лучше, чем вставлять много раз по 1 записи, но нужно ли как-то ограничивать количество для одной вставки? Можно ведь и несколько гигабайт выставить и вставлять вообще все товары одним инсёртом. Как сделать оптимальнее?
  • Вопрос задан
  • 287 просмотров
Пригласить эксперта
Ответы на вопрос 2
dmitriylanets
@dmitriylanets
веб-разработчик
1. Вам по большому счету не нужно заморачиваться с данным вопросом, это дело прослойки работающей с бд.
например у вас 1000 записей, вы их вставляете например массивом $adapter->insert("table",$data)
этот метод должен определить размер вставляемых данных, получить настройку max_allowed_packet определяющую размер пакета, разделить вставляемый массив на части в зависимости от размера пакета = весь размер массива/max_allowed_packet
2. Если 200 товаров у вас упирается в 64мб то 1000 товаров будет весить 320мб, вы можете упереться в память php (memory_limit) поэтому придется увеличивать ее также
Ответ написан
Комментировать
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
Что вы храните в базе? и каким образом запрос делаете через values или каждый запрос как полный отдельный запрос?

64мб/200 товаров
300кб = 1 товар
Война и мир в txt формате весит около 3мб.
10 ваших товаров = война и мир
Не слишком ли много?

dba.stackexchange.com/a/45667
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы