Nun 13.000 SQL Statements zu kompilieren kann schon ein wenig dauern…
Mit Verwaltung habe ich Start->Einstellungen->Systemsteuerung->Verwaltung gemeint… Darunter dann Systemmonitor. Bei einem MS SQL Server kann man dort praktisch die SQL Statements pro Sekunde protokollieren lassen, welche der Server kompiliert… Bei einem Oracle Server muesste es auch solche Tools geben…
@Bulk Insert
Bei einem Bulk Insert fuegst du sehr viele Daten an eine Tabelle an. Da das SQL Statement ja immer gleich aussehen wuerde und sich nur die Daten aendern, gibt es die Moeglichkeit eines Bulk Insert (Ist so, als wuerde man Daten importieren…):
Am Besten du suchst im Google oder ziehst die Oracle Dokumentation zu Rate, wie ein Bulk Insert gemacht wird. Meist werden die Daten aus einer TextDatei herangezogen. Also wuerdest du im Programm diese Datei (im entsprechenden Format) erzeugen und dannach auf „einmal“ einfuegen…
@Prepared SQL Statement
Es gibt die Moeglichkeit SQL Statements am Server „vorzubereiten“, dH der Server ‚kompiliert‘ das SQL Statement und ersetzt dannach die Platzhalter mit den uebergebenen Werten…
Das wuerde bedeuten, dass du vor der Schleife das Prepared Statement aufbaust…
zB:
strSQL = "INSERT INTO TABELLE (Feld1, Feldn) VALUES (@Wert1, @Wertn)
cmd.CommandText = strSQL;
cmd.Parameters.Add ("@Wert1",0); //Dummy Werte fuellen (Parameter anlegen)
cmd.Parameters.Add ("@Wertn","text");
cmd.Prepare(); //Veranlasst das vorkompilieren des Statements (fuehrt keine Operation aus)
foreach (...)
{
cmd.Parameters[0].Value= intAktuellerWert //aktuelle Werte setzen
...
cmd.ExecuteNonQuery(); //Ausfuehren
}
Mehr dazu in der .NET Hilfe:
System.Data.OleDb.OleDbCommand der Befehl Prepare()
Dort ist auch ein Beispiel angefuert…
Das Prepared Statement sollte auf jedenfall das Performance Problem loesen!
lg
Patrick
Hallo Patrick,
ich führe die einzelnen ExecuteNonQuery nicht auf einmal aus,
sondern hintereinander (13.000 mal). Zwischen jeder
ExecuteNonQuery ist ein wenig Zeit, da die 3 Funktionen ja da
arbeiten (siehe weiter oben mein Code-Beispiel). Da die
Funktionen aber sehr schnell sind liegt der Flaschenhals - wie
auch gemessen - bei dem ExecuteNonQuery.
Wie sieht ein Beispiel für Bulk Insert oder Prepared SQL
Statement aus? Ich habe damit noch nicht gearbeitet …
Ferner beziehst du dich auf den Punkt „Verwaltung“, aber wo
finde ich den. Im Visual Studio?
Ob es im Oracle eine Einstellung für die Anzahl der Statements
je Sekunde gibt weiß ich nicht. Werde mal den DBA fragen
.
Lieben Gruß,
Michael