Cześć,
mam za zadanie wykonywać około 25 save 13 sprawdzeń czy dany rekord już istnieje każda operacja z użyciem ActiveRecord. Ogólnie jeżeli chociaż jeden save się nie wykona to zrobi mi się bałagan, więc wrzuciłem to w transakcje MySQL i wszystko fajnie działa do około 1800 pętli, potem zaczyna się wyciek do pamięci z 14MB robi się nagle 50 i 100MB aż się zawiesza. Pętla średnio wychodzi 32tyś.
try {
$transaction = \Yii::$app->db->beginTransaction();
foreach ($service->download($type) as $output) {// zwraca generator php
// save, exists.......
echo ++$i . ' ' . memory_get_peak_usage() . "\n"; // do 1800 pętli stabilnie 14MB, potem każde następne + 40MB aż się zawiesza
}
$transaction->commit();
} catch (Exception $ex) {
$transaction->rollBack();
echo $ex->getFile() . ' ' . $ex->getMessage() . ' ' . $ex->getLine();
}
Jak usunę transakcje pętla przechodzi bez problemu, próbowałem robić commit wraz z powtórnym rozpoczęciem transakcji po każdym przejściu pętli ale efekt był podobny. Coś robię nie tak…