Oznámení
ako uvolnit pamat z dibi fluent?
před 9 lety
- Matúš Matula
- Backer | 236
Mám skript, ktorý beží v while(true)
slučke, v každej
z nich urobí niekoľko dotazov do DB pomocou dibi. Po čase php zahučí, že
skript zožral všetku pamäť. Zrejme je to tým, že neuvoľňujem resource
z dotazov.
Ak mám napr. takýto dotaz pomocou fluent interface
<?php
$userLangs = dibi::select('u.id AS userId, l.lang')
->from('users')
->as('u')
->leftJoin('languages')
->as('l')
->on('u.languages_id = l.id')
->fetchPairs('userId', 'lang')
?>
aká je best practice na uvoľnenie zdrojov? Je nutné si každý dotaz
rozložiť na 2 časti (najprv resource, z neho nejaký
fetchAll()
a následne resource uvoľniť?) alebo to ide nejako
lepšie?
před 9 lety
- westrem
- Člen | 398
Ja si myslim, ze najlepsie je si to rozdelit ako pises na 2 casti. tzn:
$r = dibi::select('u.id AS userId, l.lang')
->from('users')
->as('u')
->leftJoin('languages')
->as('l')
->on('u.languages_id = l.id');
$userLangs = $r->fetchPairs('userId', 'lang');
/*
* spracovanie
* ..
*/
// uvolnenie
$r->free();
Este otazka: Si si isty, ze problem je tu? Predsa len
while(true)
ma napada pouzit len velmi zriedkakedy a kludne moze
pamat zrat aj nieco ine v tom cykle.
před 9 lety
- Matúš Matula
- Backer | 236
diky, tak som to myslel..a ci som si isty? to teda nie som :D while(true) je tam, lebo to bezi ako proces na pozadi stale..a v podstate to urobi xyz dotazov na DB, posle nejaky mail, zapise do log suboru..spadlo to po asi 10 hodinach…Neviem co ine by tam mohlo zrat tolko pamati [resp. nejaku, premenne v kazdej iteracii znova inicializujem]. Vyskusam uvolnit zdroje a ak to nepomoze, budem patrat dalej..
před 9 lety
- phx
- Člen | 652
I unset($r) by melo byt OK.
Nevim jak to poustit, ale pokud to bezi na Nette tak vypni dibi profiler. Ten si uklada vsechny SQL dotazy do DB, takze to tam taky puchne. Minuly tyden jsem to hledal snad hodinu.
před 9 lety
- Matúš Matula
- Backer | 236
Dik phx! na profiler som uplne zabudol, zrejme on bude ten zrut pamati..btw da sa nejako zistit co konkretne mi zerie kolko pamati cez konzolu?
před 9 lety
- phx
- Člen | 652
Nevim, jedine snad si nejak rucne porovnavat $GLOBALS