On Sunday 23 of October 2005 02:46, Petr Michálek wrote:
> Dobrý den,
> vase diskuze me primela k malemu testu. Mym cilem bylo zmerit dobu
> natazeni natazeni vetsiho poctu radku pres JDBC.
>
> Pred samotnym nahranim radku jsem presel na posledni zaznam a zpet.
> Vysledek naznacuje, ze data jsou do klientske JVM natazeny jiz ve fazi
> vykonani SQL dotazu, nicmene vyuziti pameti nedosahuje kritickych hodnot.

No to jsou IMHO VELMI kriticka data pro vyuziti pameti. Data jsou v JVM 
zdvojena. Navic v okamziku, kdy neni nutne nahrat vse do pameti, je 
evidentni, je toto opravdu mrhani prostredky. Co kdyby slo o Webovy server? 
Paralelni pristup tisici klientu znamena tisic paralelnich resultsetu, takze 
2tisicekrat preneseni dat z databaze na server. Pak uz je opravdu pouziti DB 
uplne zbytecna vec, protoze vetsinu rezie sezerou IO operace, obzvlaste pak 
pri pouze stovkove siti ;-)

> Dale bych podotknul, ze drtivou vetsinu casu executeQuery("...") travi
> server vykonavanim dotazu.

Ano, obzvlaste ten prvni pripad ukazuje, ze vysledek o 20MB dat nad peti 
tabulkami nebyl nejtrivialnejsi. Hodne bych sazel na to, ze DB nejela podle 
plne indexace, ale hodne se muselo cist zbytecne a skakat. Navic hlavicka na 
disku se pak asi hodne natrepala pri neustalem preskakovani mezi sektory.. No 
a v druhem pripade se muselo 70MB nacist z disku do pameti a prenest po 
stovkove siti z jednoho pocitace na druhy ;-)

Zkuste polozit tyto dotazy primo z klienta a vypis hnat do /dev/null, aby 
zbytecne nezatezoval klienta a zmerte casovy rozdil. JIste bude, ale nerekl 
bych, ze bude v radu.

> TEST 1:
> Dotaz do 5 tabulek, ktery vratil 83738 radku a 12 sloupcu.
>
> Vyuziti pameti        Cas(ms) Popis cinosti
>   2059808     -       pred dotazem
> 22743400      12301   vykonani dotazu - execute(query)
> 22743400      0       Scrollovani na konec resultset.last()
>                       resultset.getRow() vraci 83738 radku.
> 45122128      5901    resultset.getFirst()
>                       Zkopirovani vysledku do ArrayList<Object[]>
>
> Test 2:
> Dotaz do 1 tabulky, ktery vratil 312577 radku a 12 sloupcu.
>
> Vyuziti pameti        Cas(ms) Popis cinosti
>   2002384     -       pred dotazem
> 74867872      9073   vykonani dotazu - execute(query)
> 74867872      2       Scrollovani na konec resultset.last()
>                       resultset.getRow() vraci 312577 radku.
> 155728968     23849   resultset.getFirst()
>                       Zkopirovani vysledku do ArrayList<Object[]>

-- 
Oto 'tapik' Buchta, [EMAIL PROTECTED]
Senior Engineer, Systinet Corp,
http://www.systinet.com

Odpovedet emailem