Seite 1 von 1

SQL Insert stürzt nach ein paar tausend Durchgängen ab

Verfasst: Mo, 17.09.2012 16:41
von Dirk123
Hallo Zusammen,

ich habe ein Problem mit vielen SQL-Insert Kommandos. Nach einigen 100.000 Befehlen hängt sich das Test-Makro (siehe unten) auf. ID in der Datenbank ist auf LONG gestellt. OO Version ist 3.4.

Beispielprogramm:

Sub TEST
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DatenQZ = DatabaseContext.getByName("TESTDATENBANK")
Verbindung_QZ = DatenQZ.GetConnection("","")
SQL_Anweisung = Verbindung_QZ.createStatement()
Counter = 0
do while Counter < 100000000
SQL_Anweisung.execute("INSERT INTO TESTDATENBANK (TESTWERT) VALUES ('TEST')")
Counter = Counter + 1
loop
end Sub


Folgendes habe ich schon ohne Erfolg versucht:
SQL_Anweisung.executeUpdate(SQL) anstatt SQL_Anweisung.execute
wait 5 nach dem Insert
Mit ID Autoinkrement und ohne (dann ID selbst übergeben)
Verschiedene Datenbanksysteme: externe HSQLDB, interne Base Datenbank, MySQL
Verschiedene Betriebssysteme: Windows 7 64bit bzw. XP Home SP3.
Neuinstallation OO (vorher auch die entsprechenden Ordner gelöscht)
Java mit -Xmx bzw. -Xms Parametern aufgerufen
Verschiedene Java Versionen (32-bit) getestet: 1.6.035, 1.6.022

Folgende Feststellung konnte ich machen:
Je mehr Spalten im Insert übergeben werden, umso früher stürzt das Makro ab. Untenstehender Beispielcode schafft ca. 1,5 Mio Durchläufe. Mit 5 Spalten komme ich auf ca. 300.000 Durchläufe.
Deswegen ist meine Vermutung, dass irgendein interner Puffer überläuft.

Wer kann mir da helfen?
Ich benötige knapp 10 Mio. Inserts in einem Durchlauf. Das Ganze sollte in OO funktionieren, da auf OO-Dokumente zugegriffen werden muss.

Viele Grüße

Dirk

Re: SQL Insert stürzt nach ein paar tausend Durchgängen ab

Verfasst: Mo, 17.09.2012 17:05
von juetho
Das Problem ist offensichtlich, dass die Datenbank überlastet wird. Der richtige Weg muss sein, dass nach einer bestimmten Anzahl von INSERTs (maximal nach 1000 Befehlen, besser nach je 100) eine Transaktion abgeschlossen wird. Suche nach den Begriffen Transaktion und COMMIT. Bei MySQL gibt es die Möglichkeit, die Datenbank auf AutoCommit einzustellen; dann würde jeder Befehl sofort bestätigt, aber das würde den gesamten Ablauf merklich verlangsamen.

Gruß Jürgen

Re: SQL Insert stürzt nach ein paar tausend Durchgängen ab

Verfasst: Mo, 17.09.2012 18:00
von Dirk123
Hallo Jürgen,

das hatte ich auch schon versucht. An der Datenbank wird es meiner Meinung nach nicht liegen, da es weder mit MySQL noch mit HSQLDB oder der Base eigenen DB funktioniert. Ich hatte auch schon versucht die Verbindung nach einigen tausend Inserts zu schließen und wieder neu zu öffnen (immer wieder). Auch "Checkpoint Defrag" brachte keinen Erfolg.

Ich bin mittlerweile der Meinung, dass hier OO Probleme macht.

Viele Grüße

Dirk

Re: SQL Insert stürzt nach ein paar tausend Durchgängen ab

Verfasst: Mo, 17.09.2012 19:12
von F3K Total
Hi,
ich hatte mal ähnliche Probleme, meine Vermutung ist, dass "Counter" in Basic Probleme macht.
Ist der auch im Basic als Long definiert?
Ich habe es mit einer doppelten Schleife realisiert, in der der Counter nach x Durchgängen neu gesetzt wurde.

Gruß R

Re: SQL Insert stürzt nach ein paar tausend Durchgängen ab

Verfasst: Mo, 17.09.2012 19:27
von Dirk123
Hallo,

"Counter" habe ich als Beispiel für das Forum genommen. Die Variable heist anders und ist als LONG definiert. Ich hatte da auch mal die ID in der Datenbank in Verdacht, aber die habe ich als BigInt definiert. Sollte also passen. Aber Dein Einwand ist gut.

Viele Grüße

Dirk

Re: SQL Insert stürzt nach ein paar tausend Durchgängen ab

Verfasst: Mi, 19.09.2012 08:37
von Dirk123
Hallo,

ich habe einen weiteren Thread zu dem Thema aufgemacht.
http://www.oooforum.org/forum/viewtopic ... 313#521313

Mal sehen, wer schneller ist. Bis jetzt ist das Problem noch da.

Viele Grüße

Dirk

Re: SQL Insert stürzt nach ein paar tausend Durchgängen ab

Verfasst: Mi, 19.09.2012 08:49
von juetho
Bitte korrigiere die Adresse (doppeltes h). Außerdem gibt es den URL-Button (das ist hier freilich nicht wichtig, weil die Forumssoftware den Link erkennt). Jürgen

Danke! J.

Re: SQL Insert stürzt nach ein paar tausend Durchgängen ab

Verfasst: Mi, 19.09.2012 09:22
von Dirk123
Hab ich erledigt.