AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Abfrage von großen Datenmengen
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage von großen Datenmengen

Ein Thema von dARKeAGLE · begonnen am 3. Jan 2013 · letzter Beitrag vom 4. Jan 2013
Antwort Antwort
Seite 1 von 2  1 2      
dARKeAGLE

Registriert seit: 17. Jun 2011
Ort: Laupheim
13 Beiträge
 
Delphi XE Professional
 
#1

Abfrage von großen Datenmengen

  Alt 3. Jan 2013, 12:38
Datenbank: MySQL • Version: 5.5.28 • Zugriff über: Devart DBExpress
Hallo Zusammen,

sobald ich eine Abfrage starte, welche mehr als ca. 20 000 Datensätze zurückliefert läuft mein Arbeitsspeicher voll und die Exception "Nicht genügend Speicher für diese Operation" wird ausgegeben.

Des Weiteren habe ich noch eine Master/Detail-Beziehung

Der Master (Mandant) hat 8 Datensätze, je nach Master gibt es unterschiedliche Buchungen(Detail).
Code:
+-----------+-------------------+
| Mandant   |  Anzahl Buchungen |
+-----------+-------------------+
|!01        |  11000            |
|!02        |  30000            |
|!03        |  40000            |
|!04        |  523624           |
|!05        |  10000            |
|!06        |  10000            |
|!5         |  10000            |
+-----------+-------------------+
Sobald ich die innerhalb des Masters scrolle, ändert sich ja auch der Details (was gewünscht ist), doch bei einer größeren Anzahl kommt die obengenannte exeception.

Hat jemand eventuell eine Idee wie das Problem gelöst werden kann.


Viele Grüße und vielen Dank im Voraus

Christian


P.S.: Das Projekt sowie ein Backup der MySQL-Daten sind angehängt
Angehängte Dateien
Dateityp: zip MasterDetail.zip (4,52 MB, 14x aufgerufen)
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.210 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Abfrage von großen Datenmengen

  Alt 3. Jan 2013, 13:34
20.000 Datensätze. Hier die Frage wieder: Wer schaut sich dies direkt an?

Mit welchen Compilereinstellungen ist die Anwendung erstellt? Mit maximalen Debug-Infos?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
dARKeAGLE

Registriert seit: 17. Jun 2011
Ort: Laupheim
13 Beiträge
 
Delphi XE Professional
 
#3

AW: Abfrage von großen Datenmengen

  Alt 3. Jan 2013, 13:43
Also 20.000 Datensätze ist noch das kleinste, aber wer des anschauen will keine Ahnung. Ist glaub für ein komplettes Geschäftsjahr.

Ja die Anwendung wurde mit den maximalen Debug-Infos kompiliert. Auch den Debug-DCUs.

Muss ich es irgendwie anders kompilieren?

Viele Grüße

Christian
Christian
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Abfrage von großen Datenmengen

  Alt 3. Jan 2013, 13:55
zum einen, wäre es nicht sinnvoller gleich eine Datei als Ausgabe zu generieren? (Excel)
Ohne Debug-Info ist die Exe etwas kleiner und man etwas mehr Platz.

Ggf. wäre es sinnvoll einen readonly-cursor zu verwenden (falls definierbar) oder den Cursor auf dem Server zu verwenden (falls es geht)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.351 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Abfrage von großen Datenmengen

  Alt 3. Jan 2013, 14:03
Verwendest Du ClientDataSets?
Dann werden alle Abfragedaten darin (im Speicher) verwaltet.
Insofern eignet sich DBExpress nicht unbedingt für solche größeren Rückgabemengen von Abfragen.

(soweit meine Einschätzung als DB-Laie)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
dARKeAGLE

Registriert seit: 17. Jun 2011
Ort: Laupheim
13 Beiträge
 
Delphi XE Professional
 
#6

AW: Abfrage von großen Datenmengen

  Alt 3. Jan 2013, 14:09
Jein. Ich nutze zwei TSimpleDataSet und eine TSQLConnection mit dem Devart Treiber MySQL Direct. Das TSimpleDataSet erbt ja vom TCustomClientDataSet.

Gibt es keine Komponenten für Read-Only zugriffe, da ich die Daten NUR lesen will und nicht wieder wo anderes hin speichere oder manupuliere möchte.


zum einen, wäre es nicht sinnvoller gleich eine Datei als Ausgabe zu generieren? (Excel)
Ohne Debug-Info ist die Exe etwas kleiner und man etwas mehr Platz.

Ggf. wäre es sinnvoll einen readonly-cursor zu verwenden (falls definierbar) oder den Cursor auf dem Server zu verwenden (falls es geht)

Gruß
K-H
Also ohne die Debug-Informationen bekomme ich leider auch nicht mehr Datensätze über die Leitung.

Grüße
Christian
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Abfrage von großen Datenmengen

  Alt 3. Jan 2013, 14:36
Jein. Ich nutze zwei TSimpleDataSet und eine TSQLConnection mit dem Devart Treiber MySQL Direct.
Du nutzt also keine query um nur die gewünschten Daten von der DB zu holen?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.599 Beiträge
 
Delphi 12 Athens
 
#8

AW: Abfrage von großen Datenmengen

  Alt 3. Jan 2013, 15:17
Jein. Ich nutze zwei TSimpleDataSet und eine TSQLConnection mit dem Devart Treiber MySQL Direct. Das TSimpleDataSet erbt ja vom TCustomClientDataSet.
Das Problem ist das TSimpleDataSet. Das ist, wie du schon bemerkt hast, ein TCustomClientDataSet. Somit hat es auch genau dieselben Einschränkungen. Es erspart dir lediglich ein SQLDataSet und einen DataSetProvider, die du andernfalls selbst verdrahten müsstest.

Das Simple-/ClientDataSet lädt stndardmäßig das komplette Abfrageergebnis in den Hauptspeicher und da knallt es natürlich ab einer gewissen Menge.

Du kannst also entweder deine Abfrage mit einer sinnvollen WHERE-Klausel verkleinern, was aber ohne Kenntnis möglicher Kriterien schwierig wird, oder (besser) du verzichtest auf das Grid und verwendest lediglich ein TSQLDataSet (das ist unidirektional und somit nicht in einem Grid darstellbar). Da sich aber wohl kaum jemand die ganzen 20000 Datensätze in dem Grid anschauen will, sollte das zu verschmerzen sein.

Wenn es nicht ohne das Grid geht, musst du feststellen, nach welchen Kriterien die Abfrage eingeschränkt werden kann (z.B. Jahr/Monat der Buchungen oder so). Dann zuerst das Kriterium eingeben und dann erst die Abfrage öffnen.

Vergiss alles bezüglich der Debug-Infos, das Problem ist die Menge der abgefragten Daten.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.210 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Abfrage von großen Datenmengen

  Alt 3. Jan 2013, 14:47
Ja die Anwendung wurde mit den maximalen Debug-Infos kompiliert. Auch den Debug-DCUs.

Muss ich es irgendwie anders kompilieren?
Probiers mal ohne jegliche Debug-Infos. Diese blähen Teilweise den benötigen Speicherbedarf aufs 5-10fache auf.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
dARKeAGLE

Registriert seit: 17. Jun 2011
Ort: Laupheim
13 Beiträge
 
Delphi XE Professional
 
#10

AW: Abfrage von großen Datenmengen

  Alt 3. Jan 2013, 14:52
Ja die Anwendung wurde mit den maximalen Debug-Infos kompiliert. Auch den Debug-DCUs.

Muss ich es irgendwie anders kompilieren?
Probiers mal ohne jegliche Debug-Infos. Diese blähen Teilweise den benötigen Speicherbedarf aufs 5-10fache auf.
Habe es gerade ausprobiert, im Anhang meine Einstellungen.
Leider waren es nur ca. 30MB, was reduziert wurde. Aber bei 1,7 GB ist das nur ein Tropfen auf den heißen Stein.

Grüße
Angehängte Grafiken
Dateityp: png DebugEinstellungen.png (67,0 KB, 19x aufgerufen)
Christian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz