Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#5

Re: Verarbeiten von großer Ergebnismenge wird immer langsame

  Alt 6. Feb 2009, 12:53
Hallo,

meine Erfahrung mit SQL-Server ist (mit großen Datenmengen) nicht so groß, aber bei Oracle habe ich schon ähnliche Erfahrungen gemacht.

Wenn man ein SQL absetzt, legt die Datenbank los. Du bekommst nach 17 Sekunden die ersten Ergebnisse, d. h. aber nicht, dass die Datenbank mit ihrer Abfrage schon fertig ist. Nach 17 Sekunden liegen nur die ersten Daten vor (das mag jedoch auch datenbankabhängig sein).

Wenn Du Dein SQL mal in einem DB-Grid anzeigen lässt, solltest Du auch nach ca. 17 Sekunden die ersten Ergebnisse sehen, gehst Du nun mit 'nem DB-Navigator zum letzten Datensatz, kann das schon eine Weile dauern. Habe hier schonmal bei 'ner Oracle-Datenbank und sehr vielen Daten (mehrere Mio. Sätze), Stunden gewartet, bis der letzte Satz zu sehen war.

Es wäre also denkbar, dass Du die Daten schneller abholst, als die Datenbank sie liefern kann.

Mess' mal spasseshalber die Zeit, die vergeht, wenn Du nach dem Open direkt ein Last ausführst. Wann bist Du dann am Ende der Datenmenge? Weitere Sekunden oder Stunden. Bei Sekunden hast Du das Problem im Programm, andernfalls liefert die Datenbank die Daten nicht schneller und Du musst im Programm warten.

Beobachte mal im Programmverlauf im Taskmanager die Speichernutzung, steigt der Speicherverbrauch, wird eventuell im Laufe der Zeit soviel Speicher verbraucht, dass Windows anfängt auszulagern? Wie ist die Speicherentwicklung während der Abarbeitung der While-Schleife, wächst der Verbrauch weiter an?

Hast Du irgendwelche Komponenten, die während der Abarbeitung der Daten, diese in der Oberfläche anzeigen (DB-Grid, DBEdits...)? Dann deaktiviere die mal beim Abarbeiten der Daten.

Auslagerung: Je nach Windowskonfiguration wird auch ausgelagert, wenn der Arbeitsspeicher noch ausreichend groß ist. Windows ist in der Lage, den gesamten Arbeitsspeicher immer auch in die Auslagerungsdatei zu schreiben, um beim Absturz aus der Auslagerungsdatei das Speicherabbild in eine Datei zu ziehen. Ist nun auch noch die Auslagerungsdatei mit einer dynamischen Größe konfiguriert, muss Windows immer wieder ausreichend Platz reservieren. Bei einer stark fragmantierten Platte hat diese dann ziemlich was zu tuen.
  Mit Zitat antworten Zitat