с товарами около 70 тыс штук. Информация о товарах, а также их характеристики обновляются каждые 3 минуты. Занимает это примерно 1 минуту. В момент, когда обновляются товары пользоваться сайтом невозможно. Страница грузится почти минуту. Ну очень долго. Как можно этого избежать?
Транзакции?
как именно обновляются? Разбить на чанки Проводить поэтапно Но лучше использовать очереди Хотя тот момент, что раз в 3 минуты нужно посмотреть как будет работать
А можно обновить в таблице рядом, а потом переименовать таблицы?
"Serialization failure: 1213 Deadlock found when trying to get lock; try restarting" - как-то увидел такую ошибку, значит при обновлении чанками происходит блокировка таблицы. Из-за этого зависает? Точнее upsert использую
По ощущениям, в этот момент начинает тупить БД. Ну когда выполняется этот код
Не знаю на сколько это правильно. Выглядит как сомнительное решение. Или я не прав?
А сервер мониторил? Где именно идет нагрузка? Что именно грузит? База данных или php? Вроде как на первый взгляд должно работать. Размер чанки пробовал уменьшать? Если проблема в базе данных - должно уменьшить на ее нагрузку, например, попробуй 100-200 поставь
Попробую уменьшить и еще я понял что очереди неправильно использую. Сейчас переделаю и отпишу)
Нет. Не зависает, скорее не справляется с нагрузкой и ждет пока таблицы блок пройдет
Категорически не правы
Мы так обновляли очень много какие таблиц. Но нужно учитывать что желательно в этот момент не писать в эту таблицу. То есть желательно чтобы все записи в нее шли из одного места.
Спасибо, попробую. Мне вроде как подходит такой вариант.
Я правильно понимаю - сюда еще и очереди прикручены?
Точнее нет. Сейчас прикручиваю. До этого не правильно были прикручены
тогда интересно посмотреть полный код
Короче очереди помогли и размер чанка поменял. Очереди не правильно использовал)
Обсуждают сегодня