может гуру подскажут. Есть одна очень большая транзакция с разными upsert (их много) и update (парочка) в моделях. Мне очень важно ее либо выполнить, либо откатить. Я делаю так:
retry(50, function () use ($task) {
DB::beginTransaction(); // Начало транзакции
try {
// Код с запросами upsert и update по моделям
DB::commit(); // Фиксация изменений
} catch (\Exception $e) {
DB::rollback(); // Откат изменений в случае ошибки
}
}, function ($attempt) {
return $attempt * 1000;
});
В итоге в логе вижу ошибку:
local.ERROR: There is already an active transaction {"exception":"[object] (PDOException(code: 0): There is already an active transaction
Спросите, почему так много retry - потому что получал часто mysql server has gone away.
Что посоветовали бы? Транзакцию необходимо гарантированно выполнить.
Может, для начала разобраться с gone away?
Идея хорошая, только с чего начать? Там реально большая нагрузка по запросам может быть. Не факт, что vds позволяет больше.
Значит, пора съезжать с VDS и масшабироваться
Экстенсивный путь.
Обсуждают сегодня