Java + mysql: insert enorm traag?

Pagina: 1
Acties:

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 19:06
Ik ben hier voor de gein wat aan het experimenteren met java en een mysql database, en wat me opvalt is dat de boel enorm traag is. Gemiddeld 46ms voor een insert van een record in een tabel met 2 velden (1 autonum en 1 varchar). Is dit normaal? Dit moet toch veel en veel sneller kunnen?

Ik gebruik MySQL 4.1.12a, j2re1.4.2_04 en Connector/J driver 3.1.10

De code voor deze kleine test zier er als volgt uit:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Class.forName("com.mysql.jdbc.Driver").newInstance();

String url = "jdbc:mysql://localhost:3306/test";
Connection conn = DriverManager.getConnection(url, "root", "xxxxxx");

Statement sql = conn.createStatement();
int amount = 100;
long l1 = System.currentTimeMillis();
for(int i = 0; i < amount; i++)
{
sql.execute("INSERT INTO tbl(txt) VALUES ('ret')");
}
long l2 = System.currentTimeMillis();
float avg = (float)( l2 - l1 ) / (float)amount;
System.out.println(amount + " records inserted in " + (l2 - l1) + " milliseconds, avg: " + avg);
conn.close();


Dit alles draai ik op een P4 3 Ghz, 1024Mb ram (toch niet echt lullig...). Als ik de test draai wordt er ook nauwelijks cpu gebruikt (ong 4%). Iemand een idee hoe dit kan komen?

[ Voor 26% gewijzigd door sig69 op 30-06-2005 16:38 . Reden: Spelvoutjes... ]

Roomba E5 te koop


  • _serial_
  • Registratie: Augustus 2000
  • Laatst online: 27-04 23:19

_serial_

and there was silence

drop java

Modbreak:Als je niets zinnig te zeggen hebt, zeg dan helemaal niets.

[ Voor 81% gewijzigd door whoami op 30-06-2005 16:17 ]

somewhere there was silence


  • momania
  • Registratie: Mei 2000
  • Laatst online: 17:20

momania

iPhone 30! Bam!

Waarschijnlijk staat je autoCommit nog aan, en doe je nu na elke execute dus automatisch een commit. Dat zal al een hoop tijd kunnen schelen als je dat alleen aan het einde van je loop doet.

Verder kan je nog eens kijken naar de verschillende transaction isolation levels. Ik meen me te herinneren dat je daar ook nog wel wat tijdwinst kan halen...

Neem je whisky mee, is het te weinig... *zucht*


  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
Welke Connector/J driver gebruik je?

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 19:06
ronaldmathies schreef op donderdag 30 juni 2005 @ 16:01:
Welke Connector/J driver gebruik je?
De laatste, 3.1.10

Kleine update: ik was even vergeten dat ik ook met MySQL replication bezig was, dat heb ik nu uigezet en het is nu gezakt naar 27ms per insert, wat ik nog steeds erg veel vind...

[ Voor 76% gewijzigd door whoami op 30-06-2005 16:18 ]

Roomba E5 te koop


  • _serial_
  • Registratie: Augustus 2000
  • Laatst online: 27-04 23:19

_serial_

and there was silence

sig69 schreef op donderdag 30 juni 2005 @ 16:01:
Ja lekker nuttige reply... Zeg dan niks.
Sja java is nou eenmaal traag t.o.v. andere talen

Modbreak:Dat heeft er helemaal niks mee te maken, dus kap ff met die onzin.

[ Voor 18% gewijzigd door whoami op 30-06-2005 16:19 ]

somewhere there was silence


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 19:06
_serial_ schreef op donderdag 30 juni 2005 @ 16:03:
[...]
Sja java is nou eenmaal traag t.o.v. andere talen
Maar je kan me niet vertellen dat een simpele insert op een redelijk snelle bak 27 ms moet duren. Dat is gewoon onzin.

Roomba E5 te koop


  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
_serial_ schreef op donderdag 30 juni 2005 @ 16:03:
[...]


Sja java is nou eenmaal traag t.o.v. andere talen
Dat is dus totale onzin. Of je hebt nooit met goed Java applicaties gewerkt of je bent gewoon een nitwit die gewoon herhaalt wat hij anderen ooit eens heeft horen zeggen.
Java is niet traag, java kan zich over het algemeen prima meten met applicaties die in C geschreven zijn. Als een Java applicatie traag is, dan is dat over het algemeen de schuld van de ontwikkelaar die stomme dingen doet.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
De vraag is gewoon of dit met Java sneller kan. Punt. Ja, java gebruikt een JVM en dat kost ook geheugen, maar de timers staan puur om de queries heen, dus mag het verschil met andere talen niet groot zijn.

{signature}


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 19:06
Remus schreef op donderdag 30 juni 2005 @ 16:06:
[...]
*knip*
is niet traag, java kan zich over het algemeen prima meten met applicaties die in C geschreven zijn. Als een Java applicatie traag is, dan is dat over het algemeen de schuld van de ontwikkelaar die stomme dingen doet.
Doe ik hier iets stoms dan?

Roomba E5 te koop


Verwijderd

Ja je root password posten ;)


maar heb je al, zoals voorgesteld, auto commit uitgezet?

[ Voor 16% gewijzigd door Verwijderd op 30-06-2005 16:36 ]


  • KurtDB
  • Registratie: Juni 2004
  • Laatst online: 09-02 20:28
27ms is trouwens helemaal niet zo traag voor 'n insert. Je moet immers ook rekening houden met het feit dat een schrijf-opdracht op de harde schijf nu eenmaal ook trager is dan 'n lees-opdracht.

Beweren dat java traag is, is duidelijk maken dat je er zelf geen bal van kent... :)

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Ik vermoed dat het een stuk scheelt als je een PreparedStatement gebruikt. Dus zoiets:

code:
1
2
3
4
5
PreparedStatement pstmt = connection().prepareStatement('insert into table (kolom) values(?)');
for () {
   pstmt.setString('ret');
   pstmt.execute();
}

[ Voor 9% gewijzigd door Varienaja op 30-06-2005 16:40 ]

Siditamentis astuentis pactum.


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 19:06
Verwijderd schreef op donderdag 30 juni 2005 @ 16:36:
[...]
Ja je root password posten ;)
maar heb je al, zoals voorgesteld, auto commit uitgezet?
Oeps, foutje... nou ja het is toch lokaal.
Dat autocommit had ik ff overheen gelezen, zal het even proberen.
KurtDB schreef op donderdag 30 juni 2005 @ 16:37:
27ms is trouwens helemaal niet zo traag voor 'n insert. Je moet immers ook rekening houden met het feit dat een schrijf-opdracht op de harde schijf nu eenmaal ook trager is dan 'n lees-opdracht.
Beweren dat java traag is, is duidelijk maken dat je er zelf geen bal van kent... :)
Als jij genoegen neemt met 27ms voor simpele insert, moet je dat helemaal zelf weten, ik in ieder geval niet. En ik heb helemaal nergens ook maar iets gezegd dat in de buurt komt van een bewering dat java traag is, dat heb je zojuist zelf verzonnen.

Edit:
Nou dat autocommmit scheelt aanzienlijk!! Gemiddeld nu 0,3 ms per insert! Toch een factor 100 wat dat scheelt.

[ Voor 8% gewijzigd door sig69 op 30-06-2005 16:44 ]

Roomba E5 te koop


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

momania schreef op donderdag 30 juni 2005 @ 16:00:
Waarschijnlijk staat je autoCommit nog aan, en doe je nu na elke execute dus automatisch een commit. Dat zal al een hoop tijd kunnen schelen als je dat alleen aan het einde van je loop doet.
Autocommit uitzetten staat leuk maar als je myIsam tables gebruikt ondersteunt ie deze niet. InnoDB bijvoorbeeld weer wel. Dus daar moet je wel even op letten.

Om even wat Java flame te doen: voorstellen hier zijn vast erg goed, maar het is belachelijk dat je je in allerlei bochten moet wrichten om redelijk wat performance te halen. Ook is het vreemd dat de meeste Java programma's die ik tegenkom inderdaad nogal traag zijn. Nou kan niemand mij vertellen dat alleen klungels in Java programmeren want dat lijkt me erg sterk.


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • MisterData
  • Registratie: September 2001
  • Laatst online: 16:16
Darkvater schreef op donderdag 30 juni 2005 @ 16:45:
[...]


Autocommit uitzetten staat leuk maar als je myIsam tables gebruikt ondersteunt ie deze niet. InnoDB bijvoorbeeld weer wel. Dus daar moet je wel even op letten.

Om even wat Java flame te doen: voorstellen hier zijn vast erg goed, maar het is belachelijk dat je je in allerlei bochten moet wrichten om redelijk wat performance te halen. Ook is het vreemd dat de meeste Java programma's die ik tegenkom inderdaad nogal traag zijn. Nou kan niemand mij vertellen dat alleen klungels in Java programmeren want dat lijkt me erg sterk.
offtopic:
Hetgeen dat traag aanvoelt is waarschijnlijk de GUI (Swing); en die is sinds Java 5 (1.5) een stuk sneller geworden. Java zonder GUI is retesnel hoor, wel eens op een website met jsp-pagina's geweest? En zijn die traag?

  • Swinnio
  • Registratie: Maart 2001
  • Laatst online: 12:17
Darkvater schreef op donderdag 30 juni 2005 @ 16:45:
[...]


Autocommit uitzetten staat leuk maar als je myIsam tables gebruikt ondersteunt ie deze niet. InnoDB bijvoorbeeld weer wel. Dus daar moet je wel even op letten.

Om even wat Java flame te doen: voorstellen hier zijn vast erg goed, maar het is belachelijk dat je je in allerlei bochten moet wrichten om redelijk wat performance te halen. Ook is het vreemd dat de meeste Java programma's die ik tegenkom inderdaad nogal traag zijn. Nou kan niemand mij vertellen dat alleen klungels in Java programmeren want dat lijkt me erg sterk.
Kijk dan hier maar eens en bespreek je bevindingen in een topic dat daarvoor bedoeld is, zou ik zeggen.....

If the world wouldn't suck, we'd all fall off


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

_serial_ schreef op donderdag 30 juni 2005 @ 16:03:
Sja java is nou eenmaal traag t.o.v. andere talen
Tja... ik denk dat iedereen nu wel overtuigd is van jouw intelligentie.

  • bonzz.netninja
  • Registratie: Oktober 2001
  • Nu online

bonzz.netninja

Niente baffi

^^ dat is toch al gezegt door zo'n beetje iedereen hier, incluis de mod?

Heb je de vertragingen ook met 3.0 (of 3.2 alpha) van de connector. Gevoelsmatig lijkt me naar het probleem.

[ Voor 27% gewijzigd door bonzz.netninja op 01-07-2005 10:04 ]

vuistdiep in het post-pc tijdperk van Steve  | Joepie joepie. Dat ging echt toppie! | https://www.wegmetbigtech.nl


Verwijderd

_serial_ schreef op donderdag 30 juni 2005 @ 15:58:
drop java

Modbreak:Als je niets zinnig te zeggen hebt, zeg dan helemaal niets.
[offtopic]Maar dat weet je dus niet dat hij niks te zeggen heeft omdat hij het niet gezegd heeft, die is moeilijk[/offtopic]

Java is niet traag van zichzelf, de JDBC driver is wel behoorlijk traag, er is daarom een project in het leven geroepen waar mee database connecties aanzienlijk sneller zijn (en transacties ook)

[url=Prevayler Website] http://www.prevayler.org[/url]

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op vrijdag 01 juli 2005 @ 10:04:
[...]


[offtopic]Maar dat weet je dus niet dat hij niks te zeggen heeft omdat hij het niet gezegd heeft, die is moeilijk[/offtopic]

Java is niet traag van zichzelf, de JDBC driver is wel behoorlijk traag, er is daarom een project in het leven geroepen waar mee database connecties aanzienlijk sneller zijn (en transacties ook)

[url=Prevayler Website] http://www.prevayler.org[/url]
Verder kan je met caching in een or-mapper ook een behoorlijke performance winst halen: geen db call is beter dan 1 db call :)

[ Voor 4% gewijzigd door Alarmnummer op 01-07-2005 10:06 ]


  • Sammy
  • Registratie: Maart 2000
  • Laatst online: 03-05 10:41
Verwijderd schreef op vrijdag 01 juli 2005 @ 10:04:
[...]

Java is niet traag van zichzelf, de JDBC driver is wel behoorlijk traag, er is daarom een project in het leven geroepen waar mee database connecties aanzienlijk sneller zijn (en transacties ook)

Prevayler Website
Prevayler is een implementatie van Object Prevalence , een techniek die niets van doen heeft met relationele databases en connecties daarnaar toe. Dat ze zichzelf wel opwerpen als de vervanger van alle RDBMS'en is een ander, lang, verhaal...
Pagina: 1