Forum Delphi.cz

Delphi => FireDAC => Téma založeno: ShaneZB 14-10-2020, 09:16:44

Název: Rychlost TFDTable
Přispěvatel: ShaneZB 14-10-2020, 09:16:44
Zdar všem.
Pracujeme na opuštění BDE a to přechodem na FireDAC. Používáme databázi FireBird. Při testování nás nemile překvapilo rapidní zpomalení načtení dat oproti BDE. Možná je hlavní problém v tom, že se používá třída TTable (TFDTable) – ale vzhledem k situaci není možné se tomu vyhnout. Zkoušíme různé rady z internetu, ale nic nezabírá.
Moje osobní domněnka je, že bez ohledu na nastavení, že se RecordCount má zjišťovat podle počtu stažených dat, zjišťuje se vždy kompletní počet – nebo něco nastavuju špatně – protože „FireDAC Monitor“ vypisuje dotaz na COUNT vždy. BDE zjišťuje RecordCount až když je třeba.
Je nějaká možnost, aby TFDTable nedělal dotaz na počet záznamů ihned po Open, ale dalo se to  zjistit až na vyžádání?
Nebo - existuje nějaký jiný spolehlivý postup/nastavení pro dosažení rychlého otevření tabulky?
Název: Re:Rychlost TFDTable
Přispěvatel: Radek Červinka 14-10-2020, 10:55:17
Pouzivas FetchOptions.Mode := fmAll ?

Jaky je v case rozdil mezi otevrenim v TFDTable a TFDQuery?

Proc presne potrebujes TFDTable? i nad TFDQuery muzes delat updaty pres Edit a spol, jen musi byt jasny index, a jiny duvod mne nenapada.
Název: Re:Rychlost TFDTable
Přispěvatel: ShaneZB 14-10-2020, 11:14:36
Citace
Pouzivas FetchOptions.Mode := fmAll ?
Mám tohle nastavení:
Kód: [Vybrat]
  FetchOptions.Mode := fmOnDemand;
  FetchOptions.RowsetSize := 20;
  FetchOptions.RecordCountMode := cmFetched;

Citace
Jaky je v case rozdil mezi otevrenim v TFDTable a TFDQuery?
Záleží na velikosti tabulky - čím větší tím vetší je rozdíl - třeba i poloviční. Ale mě víc trápí rozdíl rychlosti TTable <> TFDTable.

Citace
Proc presne potrebujes TFDTable? i nad TFDQuery muzes delat updaty pres Edit a spol, jen musi byt jasny index, a jiny duvod mne nenapada.
Projekt, který překlápím je opravdu velký moloch a TTable je moc hluboko ve střevech. Používá se FindKey; GotoNerest a pod ...




Název: Re:Rychlost TFDTable
Přispěvatel: Radek Červinka 14-10-2020, 11:30:05
tak zkus FetchOptions.Mode := fmAll, to je zhruba to co dela BDE

  FetchOptions.RowsetSize := jsem exprimentoval;
  FetchOptions.RecordCountMode := nemenil jsem ;
Název: Re:Rychlost TFDTable
Přispěvatel: ShaneZB 15-10-2020, 12:09:16
Citace
tak zkus FetchOptions.Mode := fmAll, to je zhruba to co dela BDE
To je ještě pomalejší, protože stahuje vždycky všechny záznamy v tabulce.
Název: Re:Rychlost TFDTable
Přispěvatel: Radek Červinka 15-10-2020, 12:50:54
Priznam se, ze jsem s TFDTable  nikdy nic moc nedalal, ale prislo mi ze se snazi vzdy stahnout vsechny data, nebo aspon ziskat jejich celkovy pocet, treba pro nastaveni scrollbaru v gridu atd. Proto jsem rikal ze ze me zkusenosti s FDQuery je vyhodnejsi pouzit fmAll s velkym RowSize nez fmDemand, protoze mi merenim prislo rychlejsi stahnout vse po velkych davkach, nez fmDemand postupne, hlavne protoze treba pri razeni na klientu se stejne stahlo vse, ale rozkouskovane.
Vic ti tedy neporadim, snad jen ze FireDac pri mereni byl fakt rychly treba proti ADO.
Název: Re:Rychlost TFDTable
Přispěvatel: Radek Červinka 19-10-2020, 11:02:25
Muzu se zeptat zda jsi na neco přišel? Pro budoucnost...
Název: Re:Rychlost TFDTable
Přispěvatel: ShaneZB 05-11-2020, 09:26:10
Takže, jak jsem to vyřešil? TFDTable nepoužívat na zobrazení celé tabulky. Když už je, z nějakého důvodu, nutné ji použít, tak vždy vhodně odfiltrovanou.
Jsou různé režimy chování - ale buď trvá dlouho otevření nebo to je pomalý posun po záznamech nebo je oboje rychlé, ale pak nejde používat řazení podle indexu.