Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi AnyDAC Einstellungen optimieren (https://www.delphipraxis.net/173398-anydac-einstellungen-optimieren.html)

Tod787 22. Feb 2013 10:21

Datenbank: MySQL • Version: 5.5 • Zugriff über: AnyDAC

AnyDAC Einstellungen optimieren
 
Da ich einen anderen Thread nicht aufblähen möchte stelle ich die Frage nocheinmal hier. Ich benutze AnyDAC eigentlich nur in den Standardeinstellungen im pessimistic Lockmode. Da wir teilweise sehr große Tabellen haben wüsste ich gerne ob es möglichkeiten gibt die Performance zu beschleunigen.

QuickAndDirty meinte im anderen Thread:

Zitat:

Diese sind entscheidend
FetchOptions.LiveWindowFastFirst
UpdateOptions.KeyFields
FetschOptions: FetschOptions.LiveWindow zeigt mir nur wmApproximate und wmStrict zur Auswahl

UpdateOptions: Welcher Felder trage ich hier ein? Den Primärschlüssel der Tabelle?

Daniel 22. Feb 2013 10:29

AW: AnyDAC Einstellungen optimieren
 
Wo genau hast Du denn den Performance-Verlust? Wie Du ja schon festgestellt hast, gibt es reichlich Schrauben, an denen man stellen kann. Eine sinnvolle Vorgehensweise hängt aber von den Bedürfnissen Deiner Anwendung ab.

Wenn die Performance schon beim Öffnen der Query / Table verloren geht, dann werden möglicherweise zu viele Datensätze pauschal abgerufen. Das könntest Du mit FetchMode und RowSetSize steuern.

Pauschal und ohne Rahmenbedingungen gibt es den "goldenen" Schalter nicht, der etwa dem "Turbo-Knopf" bei alten Rechnern entsprechen würde.

Tod787 22. Feb 2013 12:23

AW: AnyDAC Einstellungen optimieren
 
Fetchmode habe ich schon auf 50 stehen. Die Tabellen gehen so natürlich schnell auf allerdings ist das bei mir schnell anders wenn ich ein Tabelle.Last aufrufe.

Ich hatte zuvor DBISAM im Einsatz. Hier haben die gleichen Tabellen nur ein Bruchteil der Zeit gebraucht wie mit
AnyDAC und MySQL. Allerdings gab es andere Probleme, welche zur Umstellung führten :). Ich hatte einige Formulare mit
Master-Detail-verknüpften Tabellen welche unzumutbar langsam waren. Einzige Lösung war hier die Tabellenkomponenten durch
Queries auszutauschen.

Ich dachte die ganze Zeit, dass es so lange dauert weil MySQL eben die Ganzen Daten über das Netz jagt und AnyDAC da auch nichts ändern kann.


Was genau kann ich denn mit RowSetSize anstellen?

mkinzler 22. Feb 2013 12:26

AW: AnyDAC Einstellungen optimieren
 
-Passen die Indizes?
-Einschränken der Feldliste
-Einschränken der Erfebnismenge.
...

Elvis 22. Feb 2013 12:31

AW: AnyDAC Einstellungen optimieren
 
Zitat:

Zitat von Tod787 (Beitrag 1204762)
Ich hatte zuvor DBISAM im Einsatz. Hier haben die gleichen Tabellen nur ein Bruchteil der Zeit gebraucht wie mit
AnyDAC und MySQL.

Bei DbIsam hast du ja auch die Datei selbst geöffnet und dich spezieller Mechanismen bedient, um zum Beispiel direkt zum letzten Record oder Record# 1490 springen zu können.
Solche "Tricks" machen für ein RDBMS selten Sinn. Wenn du mit einem DBMS per SQL redest, dann am besten nicht so: "select * from SomeTable"
Du/ der User will(st) ja sicherlich nicht alle Daten, also filter auf die, die Sinn machen.
Wenn du immer alles anzeigst, hast du nciht nur Performance-Probleme. Alles was du jetzt siehst, könnte in der Zwischenzeit von jmd. geändert worden sein. Je kleiner die Happen, die auf einmal gezeigt werden, umso öfter werden sich neue Häppchen geholt und umso seltener können User veraltete Versionen sehen und anhand von denen falsche Entscheidungen treffen.

Uwe Raabe 24. Feb 2013 14:42

AW: AnyDAC Einstellungen optimieren
 
Zitat:

Zitat von Tod787 (Beitrag 1204762)
Ich dachte die ganze Zeit, dass es so lange dauert weil MySQL eben die Ganzen Daten über das Netz jagt und AnyDAC da auch nichts ändern kann.

Bei einem Last wird das wahrscheinlich auch so sein.

QuickAndDirty 24. Feb 2013 21:50

AW: AnyDAC Einstellungen optimieren
 
Zitat:

Zitat von Tod787 (Beitrag 1204736)
QuickAndDirty meinte im anderen Thread:
Zitat:

Diese sind entscheidend
FetchOptions.LiveWindowFastFirst
UpdateOptions.KeyFields

Zitat:

Zitat von Tod787 (Beitrag 1204736)
FetschOptions: FetschOptions.LiveWindow zeigt mir nur wmApproximate und wmStrict zur Auswahl

Zitat:

Diese sind entscheidend
FetchOptions.LiveWindowFastFirst
NICHT
Zitat:

Zitat von Tod787 (Beitrag 1204736)
FetschOptions.LiveWindow

FetchOptions.LiveWindowFastFirst ist ein Boolean.
Kann sein das er nicht Published ist, du ihn also im Code setzen musst. Hab zu hause nur Lazarus und keine private AnyDAC Lizenz.

FetschOptions.LiveWindow ist noch default nehme ich an.

Zitat:

Zitat von Tod787 (Beitrag 1204736)
UpdateOptions: Welcher Felder trage ich hier ein? Den Primärschlüssel der Tabelle?

Die Keyfields baut anyDAC in den Where-Teil des SQL-Querys das das Livewindow holt ein. Sollte also nach Möglichkeit sowas wie ein ID feld vom typ integer/Autoinc sein. Zur not muss man all seine Tabellen um so ein Feld erweitern. Das ist immer noch schneller als seinen kompletten code auf Querys umzustellen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:07 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