Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 8 měsíci

souki
Nový člen
Registrovaný: 25. 8. 2010
Příspěvky: 3

Nadměrná spotřeba paměti dibi::query

Narazil jsem na problém, kdy se dibi nevešlo do paměti. Zkoušel jsem problém krokovat, ale nepodařilo se mi dostat blíže, tak to zkusím aspoň trochu popsat.

Vypnul jsem profiler, nechal zapnuté detekování typu a příkaz bylo jednoduché dibi::query uvnitř foreach nad obyčejným selectem s jednou where podmínkou. Výsledkem bylo cca 100 000 řádků a 57 sloupců (pouze int nebo date). Pochopil, bych, že by se do paměti (128M) nevešlo všech 100 000 řádků, ale při přístupu přes iterátor se přeci nemají načítat všechny. Tušil jsem problém u detekování typů, ale nepodařilo se mi to potvrdit. Když jsem dotazu dal limit, tak proběhl v pořádku. Stejně tak když jsem sloupce omezil na jeden, tak dotaz proběhl. Při krokování samotné mysql_query proběhlo bez problémů.

foreach(dibi::query("select ... where cas = %t",$cas) as $r){
  // pro účely testování se neprodávdí žádná akce uvnitř foreach
}

Omlouvám se za tak obecný popis a budu rád, když mě navedete, co bych měl hledat za problém. Dibi mám poslední verzi z GITu, php 5.3.6, apache, windows

 

#2 před 8 měsíci

Milo
dibi guru
Registrovaný: 4. 5. 2010
Příspěvky: 298

Re: Nadměrná spotřeba paměti dibi::query

S přímým hledáním bohužel nepomůžu, tak objemnou tabulku nemám při ruce.

Jednou jsem s dibi narazil na memory limit, ale to bylo ve skriptu, který běžel jako daemon a nemohl se připojit k databázi. Paměť vyžraly anonymní funkce.

Jako první bych zkusil do DibiRow přidat destruktor a zkontroloval, jestli mizí na konci cyklu. Pak upravit metody iterátoru a pomocí memory_get_usage() zjišťovat, při jakém kroku paměť mizí. Bude to ale piplačka.

 

#3 před 8 měsíci

souki
Nový člen
Registrovaný: 25. 8. 2010
Příspěvky: 3

Re: Nadměrná spotřeba paměti dibi::query

Když jsem to zkoušel krokovat, tak mi přišlo, že to padlo hned v prvním řádku.
Neumí náhodou Netbeans při krokování nějak ukazovat spotřebovanou paměť? Pak by se to hledalo jednoduše. Nikde jsem to ale nenašel, takže asi neumí.

 

#4 před 8 měsíci

HosipLan
dibi guru
Registrovaný: 1. 6. 2009
Příspěvky: 2630

Re: Nadměrná spotřeba paměti dibi::query

Zkus nainstalovat xhprof.


Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHubCMS Kdyby

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni

 

#5 před 4 měsíci

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: Nadměrná spotřeba paměti dibi::query

Přetrvává problém u poslední verze? Detekování typů jsem zjednodušil.

 

Zápatí