Forum » Programiranje » java / mysql / počasne poizvedbe
java / mysql / počasne poizvedbe
BRBR ::
1. če poženem katerikoli sql skoz heidisql (al pa katerkol drug client side UI) traja stvar x časa
2. skozi javo pa y in x:Y = ugotovljeno tudi 1:10
Zakomentirano so poskusi, da bi kaj spremenil, pa ni pomagalo
test:
2. skozi javo pa y in x:Y = ugotovljeno tudi 1:10
Zakomentirano so poskusi, da bi kaj spremenil, pa ni pomagalo
test:
long sql_execution_time = 0; String url = "jdbc:mysql://my.net:3306/test"; Class.forName("com.mysql.jdbc.Driver").newInstance(); Properties props = new Properties(); props.setProperty("user", "user"); props.setProperty("password", "pwd"); //props.setProperty("autoReconnect", "true"); props.setProperty("characterEncoding", "UTF-8"); //props.setProperty("useReadAheadInput", "true"); //props.setProperty("SelectMethod", "direct"); //props.setProperty("responseBuffering", "adaptive"); Connection con = DriverManager.getConnection(url,props); String sql = "sql statement"; //java.sql.Statement stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); java.sql.Statement stm = con.createStatement(); long startTime = System.currentTimeMillis(); ResultSet rs = stm.executeQuery(sql); long endTime = System.currentTimeMillis(); sql_execution_time = endTime - startTime; long krneki = sql_execution_time; startTime = endTime; stm.close(); con.close(); result = String.valueOf(sql_execution_time);
jan_g ::
Vsakič naložiš celoten sql stack, ker za merjenje poženeš enkrat v enem JVM-ju, drži? Poskusi svojo logiko pognati večkrat zaporedoma, pri čemer ponovno uporabiš že vzpostavljeno konekcijo do baze.
Poleg tega je pametno uporabiti tudi PreparedStatement iz več razlogov, eden je tudi zaradi hitrosti, ampak bom ponovno poudaril, da se to pozna šele pri večkratnem izvrševanju sql-a.
Poleg tega je pametno uporabiti tudi PreparedStatement iz več razlogov, eden je tudi zaradi hitrosti, ampak bom ponovno poudaril, da se to pozna šele pri večkratnem izvrševanju sql-a.
BRBR ::
ok če dam test v loop
so timingi v milisec:
stp [122, 85, 82, 53, 54, 54, 52, 54, 55, 53]
prepstm[118, 82, 81, 54, 51, 55, 54, 55, 54, 53]
torej ni razlike mes stmt in prepstm, glede hitrosti (morda ker nimam nič parametrov pri prepstm)
heidi sql mi pokaže 45ms, OK ampak tole je zadost blizu, in kajpak mnogo bolje.
Torej načeloma na bi to delalo takole, če imam connection pooling:
1.odprem en web page: 120ms
2.ga odprem ponovno, in če pool izbere drug connection (al pa ga bognedaj čisto na novo odpre connection) je spet 120 ms
3.ga odprem ponovno in pool izbere isti conection kot prej: < 120 ms
?
Če zdajle klikam refresh , je skoz isto 120 ms. Al to pomeni, da mi connection pooling ne dela ?
for (int i = 0; i < 10; i++) { long startTime = System.currentTimeMillis(); ResultSet rs = stm.executeQuery(sql); long endTime = System.currentTimeMillis(); sql_execution_time = endTime - startTime; al.add(sql_execution_time); } result = al.toString();
so timingi v milisec:
stp [122, 85, 82, 53, 54, 54, 52, 54, 55, 53]
prepstm[118, 82, 81, 54, 51, 55, 54, 55, 54, 53]
torej ni razlike mes stmt in prepstm, glede hitrosti (morda ker nimam nič parametrov pri prepstm)
heidi sql mi pokaže 45ms, OK ampak tole je zadost blizu, in kajpak mnogo bolje.
Torej načeloma na bi to delalo takole, če imam connection pooling:
1.odprem en web page: 120ms
2.ga odprem ponovno, in če pool izbere drug connection (al pa ga bognedaj čisto na novo odpre connection) je spet 120 ms
3.ga odprem ponovno in pool izbere isti conection kot prej: < 120 ms
?
Če zdajle klikam refresh , je skoz isto 120 ms. Al to pomeni, da mi connection pooling ne dela ?
Zgodovina sprememb…
- spremenil: BRBR ()
jan_g ::
Težko konkretno kaj rečem, ker v bistvu ne vem, kako deluje tvoj program. Refresh česa? A si si naredil gui ali je to v terminalu? Drugače pa ja, connection (oz. na splošno resource) pooling je vedno koristna stvar. Apache ima eno knjižnico,ki jo lahko izkoristiš: dbcp
Seveda je v končni fazi nekaj odvisno tudi od implementacije knjižnice za dostopanje do baze. Se mi zdi, da je že bilo nekaj kritik na račun Connector/J (mysql client knjižnica za javo), češ da so se za druge jezike (C, Perl, itd.) dosti bolj potrudili.
Seveda je v končni fazi nekaj odvisno tudi od implementacije knjižnice za dostopanje do baze. Se mi zdi, da je že bilo nekaj kritik na račun Connector/J (mysql client knjižnica za javo), češ da so se za druge jezike (C, Perl, itd.) dosti bolj potrudili.
BRBR ::
U glavnem, naredil sem si en svoj connection pool. Tako da 100% vedno uporabim isti connection (kateremu nikoli ne rečem .close) , torej se odpre samo enkrat.
Vseeno dobim vsakič ko poženem zgornji loop tole:
?
Vseeno dobim vsakič ko poženem zgornji loop tole:
[122, 85, 82, 53, 54, 54, 52, 54, 55, 53]
?
Zgodovina sprememb…
- spremenil: BRBR ()
BRBR ::
Zaenkrat je začelo obratovat tako ko naj bi, če prvič odprem web stran je recimo 1000ms, na refresh pa samo 4ms.
Restartal sem mysql server, cnf ni spremenjen nič
sem pa tik pred zdajci odpr en connection na bazo s telimi parametri:
//https://confluence.sakaiproject.org/dis...
props.setProperty("useServerPrepStmts", "false");
props.setProperty("cachePrepStmts", "true");
props.setProperty("prepStmtCacheSize", "4096");
props.setProperty("prepStmtCacheSqlLimit", "4096");
kar naj bi šele usposobilo query caching my MySQL
Ampak na servrju koda ni spremnjena in teh parametrov tam ni.
Tako da ne vem zakaj zdaj obratuje.
Restartal sem mysql server, cnf ni spremenjen nič
sem pa tik pred zdajci odpr en connection na bazo s telimi parametri:
//https://confluence.sakaiproject.org/dis...
props.setProperty("useServerPrepStmts", "false");
props.setProperty("cachePrepStmts", "true");
props.setProperty("prepStmtCacheSize", "4096");
props.setProperty("prepStmtCacheSqlLimit", "4096");
kar naj bi šele usposobilo query caching my MySQL
Ampak na servrju koda ni spremnjena in teh parametrov tam ni.
Tako da ne vem zakaj zdaj obratuje.
Zgodovina sprememb…
- spremenil: BRBR ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | java date/timeOddelek: Programiranje | 1511 (1194) | Slovenet |
» | [Java] Prevajanje in šumniki v ubuntuOddelek: Programiranje | 2503 (2120) | mmaestro |
» | [Java] Zasnova shoot em up igreOddelek: Programiranje | 1198 (877) | PecenkA |
» | [Java] Evidenca delovnega časa - Java v navezi z AccessomOddelek: Programiranje | 3292 (2512) | c0dehunter |
» | grafika problem [JAVA]Oddelek: Programiranje | 1166 (1049) | Bojevnik |