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

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: SQL Insert stürzt nach ein paar tausend Durchgängen ab

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

von Dirk123 » Mi, 19.09.2012 09:22

Hab ich erledigt.

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

von juetho » Mi, 19.09.2012 08:49

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

von Dirk123 » Mi, 19.09.2012 08:37

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

von Dirk123 » Mo, 17.09.2012 19:27

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

von F3K Total » Mo, 17.09.2012 19:12

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

von Dirk123 » Mo, 17.09.2012 18:00

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

von juetho » Mo, 17.09.2012 17:05

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

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

von Dirk123 » Mo, 17.09.2012 16:41

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

Nach oben