AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken TFDTable.FindKey - Performance
Thema durchsuchen
Ansicht
Themen-Optionen

TFDTable.FindKey - Performance

Ein Thema von Edelfix · begonnen am 21. Sep 2021 · letzter Beitrag vom 26. Sep 2021
Antwort Antwort
Seite 1 von 2  1 2      
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
216 Beiträge
 
Delphi 10.4 Sydney
 
#1

TFDTable.FindKey - Performance

  Alt 21. Sep 2021, 15:01
Datenbank: ADS • Version: 12 • Zugriff über: FireDac
Hallo,

ich bin dabei von ADS Komponenten auf FireDac zu wechseln.

Etwas scheint aber nicht richtig zu sein. Es ist sehr langsam mit FireDac.

In einer Start Unit werden etwa 150-mal hinter einander per FindKey Werte gelesen und in einen Rekord gespeichert.

Mit ADS Komponenten geht das in 172 m/sec. (mit GetTickCount gemessen).

Das gleiche mit FireDac braucht 2218 m/sec.

Mit dem FireDac Monitor sehe ich das während dieser Zeit kein Datenbank Zugriff erfolgt. Das bedeutet das die Komponente diese Aufgabe mit internen Daten erledigt.
Leider weiß ich nicht ob die ADS Komponente für jeden FindKey Aufruf auf die Datenbank zugreift.

Jemand eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
691 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: TFDTable.FindKey - Performance

  Alt 21. Sep 2021, 16:44
ich bin dabei von ADS Komponenten auf FireDac zu wechseln.
Genau das gleiche habe ich vor ein paar Monaten auch gemacht.
FD ist schneller, obwohl ja intern auf den gleichen Treiber zugegriffen wird.
Nur auf ein paar Sachen solltest Du verzichten.
Zum Beispiel auf Locate und FindKey. Die werden nun beide Clientseitig ausgeführt und nicht mehr auf dem Server. Es wird also alles geladen und dabei sortiert.

In einer Start Unit werden etwa 150-mal hinter einander per FindKey Werte gelesen und in einen Rekord gespeichert.
Das ist auch kein wirklich toller Programmierstiel. Das Sollte eine SP auf dem Server machen und dir danach alle Werte liefern.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.

Geändert von Sinspin (21. Sep 2021 um 16:47 Uhr)
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
216 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TFDTable.FindKey - Performance

  Alt 21. Sep 2021, 17:41
Das ist ja ein heftiger Unterschied zu ADS Komponenten. In unserem Projekt werden massive TAdsTable eingesetzt. Habe eben 1800 Stellen mit FindKey gefunden.

Wie kann man einer TFDTable beibringen das sie den Server nutzen soll?
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
691 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: TFDTable.FindKey - Performance

  Alt 22. Sep 2021, 08:47
Ich habe große Mengen von TADSTable durch queries ersetzt und ziehe nur noch die Daten die wirklich gebraucht werden.

Table kommt bei mir nur noch zum Einsatz bei kleinen Tabellen, wo es egal ist ob alles gezogen wird, oder es eh Sinn macht.
Ich hatte früher das gleiche Problem. Und TADSQuery hatte einen Master/Detail Bug. Den habe ich schon vor Jahren behoben um die Komponente besser nutzen zu können.
FindKey hatte bei Queries unter ADS auch seine Probleme. Habe ich dort nie verwendet.

Master / Detail funktioniert bei FireDac wirklich gut.
Ich arbeite mit Parametern in den Scripten die FD dann selber für Master / Detail auswertet.

Beim Umstieg habe ich tausende Locate ersetzen müssen. Meißt durch direkte query Zugriffe um nur ein paar Werte zu hohlen oder zu ändern.
Viel arbeit war das schon (gut 2 Monate für 500K LOC), aber es lohnt sich. Es läuft nun alles Flotter.
Allerdings habe ich schon vorher über Jahre hinweg, halt immer wenn zeit war, so gut wie alle Änderungen die via Table gemacht wurden durch Update Scripte ersetzt.

Habe eben 1800 Stellen mit FindKey gefunden.
Aus meiner Sicht schlechter Programmierstiel. Datenbankzugriffe sind immer Teuer. Also sparsam damit sein.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Pfaffe

Registriert seit: 29. Jan 2009
297 Beiträge
 
Delphi 12 Athens
 
#5

AW: TFDTable.FindKey - Performance

  Alt 22. Sep 2021, 09:22
>> TADSQuery hatte einen Master/Detail Bug
In welcher Version.
Bitte um mehr Info. Was ist das für eine Bug?
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
691 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: TFDTable.FindKey - Performance

  Alt 22. Sep 2021, 10:04
Eigentlich beide, also TADSTable und TADSQuery. Ich denke nicht das sich daran was geändert hat. Aber in 10 und 11 war es jedenfalls so.

Ich hatte da lange Debatten drüber. ADS stellte das Verhalten als Feature dar.
Ich sehe allerdings kein Feature in der Tatsache dass ein offenes Detail alle Records zur Verfügung stellt wenn die Mastersource zu ist. Erwarten würde ich dann dass auch das Detail keine Records enthält, weil ja nicht bekannt ist wie gefiltert werden soll.

Bei FD geht das korrekt. Detail srcipt like : "SELECT * FROM DetailTable WHERE Field = :MasterField". Ist die Mastertabelle zu, ist MasterField unbestimmt und das Detail is leer.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
216 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TFDTable.FindKey - Performance

  Alt 22. Sep 2021, 14:31
Zitat:
Das Sollte eine SP auf dem Server machen und dir danach alle Werte liefern.
Was ist mit SP gemeint?
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
691 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: TFDTable.FindKey - Performance

  Alt 22. Sep 2021, 14:49
Sorry, _S_tored _P_rocedure.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
216 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: TFDTable.FindKey - Performance

  Alt 23. Sep 2021, 08:00
Wie geht der Trick?

Wenn ich ein Rekord habe der z.B. „Optionen“ heißt.
Dieser hat 150 Werte (Integer, Boolean, String) die aus der Datenbank gelesen werden.
Wie kann da SP helfen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#10

AW: TFDTable.FindKey - Performance

  Alt 23. Sep 2021, 09:33
Die SP liefert Dir alle Werte auf einmal (wobei 150 davon schon harter Tobak sind), so dass man nur eine Abfrage benötigt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 19:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz