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

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Dirk123
Beiträge: 5
Registriert: Mo, 17.09.2012 16:29

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

Beitrag 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
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

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

Beitrag 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
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Dirk123
Beiträge: 5
Registriert: Mo, 17.09.2012 16:29

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

Beitrag 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
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

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

Beitrag 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
Dirk123
Beiträge: 5
Registriert: Mo, 17.09.2012 16:29

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

Beitrag 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
Dirk123
Beiträge: 5
Registriert: Mo, 17.09.2012 16:29

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

Beitrag 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
Zuletzt geändert von Dirk123 am Mi, 19.09.2012 09:22, insgesamt 1-mal geändert.
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

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

Beitrag 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.
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
Dirk123
Beiträge: 5
Registriert: Mo, 17.09.2012 16:29

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

Beitrag von Dirk123 »

Hab ich erledigt.
Antworten