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