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
SQL Insert stürzt nach ein paar tausend Durchgängen ab
Moderator: Moderatoren
Re: SQL Insert stürzt nach ein paar tausend Durchgängen ab
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
Gruß Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: SQL Insert stürzt nach ein paar tausend Durchgängen ab
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
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
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
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
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: SQL Insert stürzt nach ein paar tausend Durchgängen ab
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
"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
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
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
Zuletzt geändert von Dirk123 am Mi, 19.09.2012 09:22, insgesamt 1-mal geändert.
Re: SQL Insert stürzt nach ein paar tausend Durchgängen ab
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ürgenDirk123 hat geschrieben:hhttp://www.oooforum.org/forum/viewtopic.phtml?p=521313#521313
Danke! J.
Zuletzt geändert von juetho am Mi, 19.09.2012 09:24, insgesamt 1-mal geändert.
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: SQL Insert stürzt nach ein paar tausend Durchgängen ab
Hab ich erledigt.