AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken MSSQL/ADO + 3 Mio Datensätze , Thread Error
Thema durchsuchen
Ansicht
Themen-Optionen

MSSQL/ADO + 3 Mio Datensätze , Thread Error

Ein Thema von bernhard_LA · begonnen am 11. Jun 2014 · letzter Beitrag vom 13. Jun 2014
Antwort Antwort
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.223 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 12. Jun 2014, 23:39
OK, 3 x hintereinander Pech gehabt

a) als der Kunde vor 14 Tagen anrief und diesen komischen "record open" Fehler berichtet hat; leider keine Fehler beim Kunden oder in seinen Daten
Hä?

b) als der nächste Verdächtige (unser DB Admin) sich in erfolgreich aus der Schlinge befreien konnte (Meeting Dauer < 30 min )
Er hat sich nicht aus der Schlinge befreit. Für den Programmierfehler (bzw. eine für die Datenmenge ungeeignete Heransgehensweise) kann der DB-Admin nix.

c) sich hier im Forum keine gefunden hat der uns eine Lösung für 12 Mio Datensätze in einer Query oder sonstwo gezeigt hat oder zeigen wollte.
Haben wir doch. Ich selbst habe dir 2 Lösungsmöglichkeiten aufgezeigt.


Also haben wir in den letzten beiden Tagen (heimlich) unseren Code inspiziert und
Wer wir? Ihre als Mitarbeiter der Firma dürft euren Quellcode nur heimlich inspizieren? Was ist das für eine Firma? Oder verstehe ich dich jetzt falsch?

a) Stellen gefunden an denen das Problem simple umgangen werden kann ("hätte man schon längst machen sollen...")
Was jetzt? Du kannst das Problem erst mal kurzfristig Lösen ohne das der Kunde Tausende € in die Hand nehmen muss um die Rechner auf 32 oder 64 GB aufzurüsten?
Dann mach es und sag deinem Chef das hier zwingend Zeit investiert werden muss um eine vernünftige Lösung auszusuchen (gefunden haben wir sie ja schon) und sie gut zu integrieren.

c) es gibt noch Stellen wo wir aktuell keine "universelle Lösung" sehen ("wenn es leicht wäre könnte es ja jeder machen ....")
Was ist eine Universelle Lösung? Es gibt welche (wurden auch schon genannt)

Unangenehm weil heute zeitlich nicht eingeplant und nicht Abschätzbar im Aufwand
Probleme sind eigentlich fast nie Zeitlich eingeplant. Aber wenn Sie da sind muss man sie mit entsprechender Priorität angehen.
Und da ist ein "heimliches" Inspizieren nicht zielgerichtet sondern da muss einen der Chef entsprechend Zeit geben um das zu Lösen. Oder ist hier der Kunde für eure Firma nur störend?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 13. Jun 2014, 07:01

c) sich hier im Forum keine gefunden hat der uns eine Lösung für 12 Mio Datensätze in einer Query oder sonstwo gezeigt hat oder zeigen wollte.
Haben wir doch. Ich selbst habe dir 2 Lösungsmöglichkeiten aufgezeigt.

c) es gibt noch Stellen wo wir aktuell keine "universelle Lösung" sehen ("wenn es leicht wäre könnte es ja jeder machen ....")
Was ist eine Universelle Lösung? Es gibt welche (wurden auch schon genannt)
Die universelle Lösung heißt 'Paging'. Dazu musst Du
1. Eine View mit mit Schemabindung erzeugen. Bei SQL < 2005 zusätzlich noch einen PRimary key
2. Indexe auf die zu filternden Spalten legen
3. nach 'Paging' googeln
4. die Kleinigkeit nur noch umsetzen (z.B. als VirtualList<IDataRow> )

Wenn Du das Pattern 'Zeige verdammt viele Daten im Grid' hast, dann musst Du
a) ein virtual Dataset besorgen (kaufen oder selbst schreiben)
b) eine Komponente besorgen, die virtuelle Daten anzeigen kann
c) die Virtual TreeView einsetzen

Bei (b) würde ich dir zu DevExpress raten.

Beim Pattern 'eigentlich müssen wir die gar nicht sehen, aber verarbeiten schon' reicht die virtuelle Liste.

DAS SIND UNIVERSELLE LÖSUNGEN FÜR DAS PROBLEM. Wie oft denn noch?

Ich vermute, Du hast keine Ahnung, wie cool Paging ist. Ich sag Dir mal was: Wenn Du in deiner Tabelle 100 Trillionen Datensätze hast, und willst Die jetzt mal alle anzeigen (bzw. durchscrollen), dann hängt sich deine Methode auf. Zwangsweise. 'Meine' Methode dagegen benötigt ca. 0.1s, um die Daten anzuzeigen. Dann kannst Du auf 'Page Down' drücken, die Taste mit einem Streichholz oder Tesa festbeppseln, und dir den echt spannenden Film '100 Trillionen Zeilen rasen über den Bildschirm' anschauen. Ohne jegliche Verzögerung.

So, nun klink ich mich hier aber kopfschüttelnd aus.

Geändert von Dejan Vu (13. Jun 2014 um 07:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TRomano
TRomano

Registriert seit: 24. Nov 2004
Ort: Düsseldorf
195 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 13. Jun 2014, 07:44
@Dejan Vu:
Thomas Forget
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.878 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 13. Jun 2014, 07:50
Ich befürchte aber, dass das Problem nicht nur an der Datenanbindung allein liegt. Da er die Daten ja nach dem Einlesen in eine Objektliste packt, ist es ja egal, ob das Einlesen nun in einem Rutsch oder in kleineren Paketen erfolgt. Da man aber den genauen Code nicht kennt ( er postet ja immer Testcode, der vielleicht zufällig den gleichen Fehler erzeugt oder Codesegmente, welche viele anderen Prozeduren aufruft (blackbox). Die Prozeduren sind auch noch ohne Parameter!
Das Programm sollte man grundsätzlich auf den Prüfstand stellen und dann teilweise/komplett neu Schreiben!
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.223 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 13. Jun 2014, 08:36
Ich befürchte aber, dass das Problem nicht nur an der Datenanbindung allein liegt. Da er die Daten ja nach dem Einlesen in eine Objektliste packt, ist es ja egal, ob das Einlesen nun in einem Rutsch oder in kleineren Paketen erfolgt.
Entsprechend dem 5ten Post (http://www.delphipraxis.net/1261946-post5.html) reicht es schon die Mio-Datensätze im Client anzufordern (CurserLocation = clUseClient)

Das Programm sollte man grundsätzlich auf den Prüfstand stellen und dann teilweise/komplett neu Schreiben!
Aber nur geheim - Chef darf ja nix davon erfahren das im Quellcode noch ein paar Supportechnische Bomben versteckt sind ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.878 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 13. Jun 2014, 08:44
Zitat:
Zitat von mkinzler:
Ich befürchte aber, dass das Problem nicht nur an der Datenanbindung allein liegt. Da er die Daten ja nach dem Einlesen in eine Objektliste packt, ist es ja egal, ob das Einlesen nun in einem Rutsch oder in kleineren Paketen erfolgt.
Entsprechend dem 5ten Post (MSSQL/ADO + 3 Mio Datensätze , Thread Error) reicht es schon die Mio-Datensätze im Client anzufordern (CurserLocation = clUseClient)
Ich hätte vielleicht nicht nur und allein unterstreichen sollen
In seinem Testprogramm hat er das DataSet ja auch noch in einem Grid anzeigen lassen, dann hat er die 3 Mio Datensätze ja noch öfters im Speicher.
Tipps für den TE (oder jemand anderes der ähnliches vor hat oder macht und für Vorschläge offen ist [bzw. dessen Chef...]):
-Nur Daten Lesen, die benötigt werden
-Ist eine Speicherung in Objektliste notwendig ( kann ja sein)?
-Manipulation der Daten direkt in der Datenbank
-Nur zur Anzeige kein komplettes laden der daten notwendig (paging, "virtuelle" Anzeigekomponenten, ...)
-Überprüfung Datenbankstruktur ( Verwendung von T<xx>Table oft in Verbindung mit Abwesenheit von Normalisierung).
-...
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.223 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 13. Jun 2014, 08:48
Ich hätte vielleicht nicht nur und allein unterstreichen sollen
In seinem Testprogramm hat er das DataSet ja auch noch in einem Grid anzeigen lassen, dann hat er die 3 Mio Datensätze ja noch öfters im Speicher.
Bei einem DB-Grid - Nein. Da wird die gerade Angezeigten Datensätze direkt aus dem Dataset geholt und visualisiert. Aber es erfolgt keine doppelte Speicherung.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:32 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-2025 by Thomas Breitkreuz