Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - DataSet Update bei großer Datenmenge; Performance


Oppi35 - Do 05.05.11 17:00
Titel: DataSet Update bei großer Datenmenge; Performance
Hallo Zusammen,

ich habe eine DataTable mit 32.000 Zeilen * 100 Spalten gefüllt. Das Schreiben in die Datenbank (SqlServer Compact sdf-Datei) hat sehr lange gedauert. Ich habe mir daher die einzelnen Schritte zeitlich protokolliert.

Das Performance Problem ist der Update-Befehl des Tableadapters (typisiertes Dataset).

Der Vorgang hat 7 Minuten gedauert. Die SDF-Datei ist jetzt 28 MB groß.

Eine Vermutung habe ich: Da ich am probieren bin, habe ich vorab fast alle Spalten mit dem Datentyp nvarchar(255) angelegt. Aber trotz der hohen Zeichenanzahl, kann das doch nicht so lange dauern.

Kann mir jemand sagen, wie ich meine Daten in kürzerer Zeit speichern kann?

Vielen Dank.

Frank


Christoph1972 - Fr 06.05.11 07:09

Guten Morgen!

Müssen den wirklich immer so viele Datensätze gespeichert werden? Passt das Konzept wirklich?


jasocul - Fr 06.05.11 07:44

100 Spalten ??????
Überarbeite mal dein Konzept!

Abgesehen davon kann es noch viele Ursachen geben, warum das so langsam ist:

Probier das Statement doch mal ohne Programm aus. Also direkt auf der DB.


Oppi35 - Fr 06.05.11 08:03

Vielen Dank für Eure Hilfe.

Ja, es müssen soviele Spalten sein.

Hintergrund:
Die Daten beziehe ich von einem SAS Server. Die Daten werden mit einem SAS-Makro aus einer Tabelle ausgewertet (aus einer Datei mit X Mio. Zeilen und 255 Spalten) und als Excel und csv-Datei auf der Festplatte gespeichert.

Die weiteren Schritte mit diesen erzeugten Tabellen möchte ich automatisieren. Es würde jetzt zu weit führen, dass im Detail zu erklären.

Es muss jeder Datensatz eingelesen werden.

Gruß
Frank


jasocul - Fr 06.05.11 08:11

Ok, klingt nach einer nervigen Sache. :mrgreen:
Trotzdem könnte man den Datensatz in mehrere Tabellen splitten. Für eine Gesamtansicht kann man das dann ja in einem View darstellen. Aber dafür kenne ich dein Konzept natürlich zu wenig.

Arbeitest du mit Transaktion? Falls ja, kann es sinnvoll sein, häufiger ein Commit zu machen, damit nicht soviel "Verwaltung" auf der DB laufen muss.
Da du ja ein Insert vor dem Update machen musst, wäre es vielleicht möglich das zu kombinieren. Also die Anpassungen an den Datensatz vor dem Insert zu machen. Damit würdest du dir das Update evtl. komplett sparen können.


Dr. Hallo - Fr 06.05.11 13:55

ok das sind ne menge spalten und reihen, aber 7 minuten nur fürs updaten? falls du die werte im datagrid o.ä. darstellst prüfe mal ob diese beim updaten aktuallisiert wird. wenn ja prüfe weiter ob du die autosize eigenschaften für die zellen deaktiviert hast. autosize ist ein wahrer performancekiller.

ich aktuallisiere eine tabelle mit 40 spalten (auch fast alles string datentypen) und ca.1500 zeilen in einem bruchteil von 1 sekunde.