Autor Téma: Cache tabuliek serverom  (Přečteno 1091 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5848
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Cache tabuliek serverom
« Odpověď #15 kdy: 04-10-2020, 20:27:51 »

Obrátil som sa priamo na FB, a dostal som takéto odpovede. Od dvoch autorov.
To by me zajimalo, na co ses to vlastne ptal
https://groups.google.com/g/firebird-support/c/o4k_8oqSOzg
Citace
O cache tabulek na disk se tady nemluvilo.
Ako prvé mám v otázke citát z inej diskusie k tomuto problému
Citace
Po restartu a prvním spuštění aplikace si DB server cachuje tabulky do paměti. Proto to trvá dlouho a pracuje se s diskem.Jakmile má objekty v paměti, pak je další práce rychlá (za podmínek, že je paměti dost a nejčastější objekty je schopný v paměti držet).
Aspoň raz mám pravdu :P
Pozriem si odkaz od pf1957. Nerozumiem tomu a to ma štve. Krokovanie mi nepomôže, lebo nemám zdrojáky od FireDAC a visí to vyslovenie na jedinom dopyte. V DB manažéri to vždy zbehne za tých 10-13 sekúnd. Nemá to vplyv na aplikáciu.
Pre istotu som si to opäť overil vypnutím PC a trvalo to 2 m 40 s :o :o :o
Podľa odpovedí to ostáva na vrub FireDAC. Keďže s tým neviem hnúť a krokovanie nemám k dispozícii, tak to musím nechať tak.
Prikladám SQL text. Je to vlastne volanie 10 identických SELECT-ov. Posledné dva sa líšia iba INNER JOIN naviac.
Kód: [Vybrat]
  BasicSelect := ' (SELECT F.IDFOCS'+
  ' FROM FOCS F' +
  ' WHERE' + WhereFoc + ' AND EXISTS (SELECT * FROM';
.
  FQryWithFOC := TFDFunction.NewQryRead(nil);
  FQryWithFOC.SQL.Text := (
  'WITH'+
  ' F AS'+
    ' (SELECT F.IDFOCS'+
    ' FROM FOCS F' +
    ' WHERE') + WhereFoc + ('),'+
  ' OW AS')+
    BasicSelect + (' OWNER_FLAT O WHERE (O.FKFOCS = F.IDFOCS))),'+
  ' S AS')+
    BasicSelect + (' SERVICES S WHERE (S.FKFOCS = F.IDFOCS))),'+
  ' FL AS')+
    BasicSelect + (' FLATS FL WHERE (FL.FKFOCS = F.IDFOCS))),'+
  ' M AS')+
    BasicSelect + (' METERS M WHERE (M.FKFOCS = F.IDFOCS))),'+
  ' C AS')+
    BasicSelect + (' CONSUMPTIONS C WHERE (C.FKFOCS = F.IDFOCS) AND (C.READING BETWEEN :DATEFORM AND :DATETO))),'+
  ' B AS')+
    BasicSelect + (' BILLING_FOCS B WHERE (B.FKFOCS = F.IDFOCS) AND (B.YEARS = :YEARS))),'+
  ' P AS')+
    BasicSelect + (' PAIDSIPOS P WHERE (P.FKFOCS = F.IDFOCS) AND (P.PAID = :PAID) AND'+
      ' (P.PERIOD BETWEEN :FIRSTDATE AND :LASTDATE))),'+
  ' R AS')+
    BasicSelect + (' REPORTTEXTS R WHERE (R.FKFOCS = F.IDFOCS) AND (R.FKREPORTS = :FKREPORTS))),'+
  ' SP AS')+
    BasicSelect + (
      ' SERVICES S'+
      ' INNER JOIN SERVICEPARAMETERS SP ON (S.IDSERVICES = SP.FKSERVICES)'+
    ' WHERE (SP.PERIOD = :YEARS) AND (S.FKFOCS = F.IDFOCS))),'+
  ' I AS')+
    BasicSelect + (' INVOICEINCOMINGS I'+
      ' INNER JOIN INVOICEINCOMINGITEMS II ON (I.IDINVOICEINCOMINGS = II.FKINVOICEINCOMINGS)'+
    ' WHERE (II.ISCOST = :ISCOST) AND (I.FKFOCS = F.IDFOCS) AND (I.FKDOCUMENTTYPES = :FKDOCUMENTTYPES)))')+
.
  ' SELECT OW.IDFOCS AS OW, S.IDFOCS AS S, FL.IDFOCS AS FL, M.IDFOCS AS M, C.IDFOCS AS C, B.IDFOCS AS B,'+
    ' P.IDFOCS AS P, R.IDFOCS AS R, SP.IDFOCS AS SP, I.IDFOCS AS I'+
  ' FROM F'+
    ' LEFT JOIN OW ON (F.IDFOCS = OW.IDFOCS)'+
    ' LEFT JOIN S ON (F.IDFOCS = S.IDFOCS)'+
    ' LEFT JOIN FL ON (F.IDFOCS = FL.IDFOCS)'+
    ' LEFT JOIN M ON (F.IDFOCS = M.IDFOCS)'+
    ' LEFT JOIN C ON (F.IDFOCS = C.IDFOCS)'+
    ' LEFT JOIN B ON (F.IDFOCS = B.IDFOCS)'+
    ' LEFT JOIN P ON (F.IDFOCS = P.IDFOCS)'+
    ' LEFT JOIN R ON (F.IDFOCS = R.IDFOCS)'+
    ' LEFT JOIN SP ON (F.IDFOCS = SP.IDFOCS)'+
    ' LEFT JOIN I ON (F.IDFOCS = I.IDFOCS)'+
  ' ORDER BY F.IDFOCS';
Až teraz som si uvedomil, že z tadiaľ vypadla tá veľká tabuľka!
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 1235
  • Karma: 51
    • Verze Delphi: 10.3
Re:Cache tabuliek serverom
« Odpověď #16 kdy: 04-10-2020, 20:31:50 »
Excellent
Rated 1 time
Citace
O cache tabulek na disk se tady nemluvilo.
Ako prvé mám v otázke citát z inej diskusie k tomuto problému
Citace
Po restartu a prvním spuštění aplikace si DB server cachuje tabulky do paměti. Proto to trvá dlouho a pracuje se s diskem.Jakmile má objekty v paměti, pak je další práce rychlá (za podmínek, že je paměti dost a nejčastější objekty je schopný v paměti držet).
Aspoň raz mám pravdu :P

Jenže to není cache NA disk, ale to, že se data Z disku načtou do paměti (RAM)...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5848
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Cache tabuliek serverom
« Odpověď #17 kdy: 04-10-2020, 21:14:55 »
To mi musíš pokaziť každú radosť?
Problém je pri tomto dopyte
Kód: [Vybrat]
  'WITH D AS'+
  ' (SELECT DISTINCT D.FKSERVICEPARAMETERS'+
//  Veľká tabuľka 3,5 mil. záznamov
  ' FROM DEPOSITS D'+                                     
  ' WHERE (D.FKFOCS = :FKFOCS) AND (D.DEPOSITPERIOD BETWEEN :FIRSTDATE AND :LASTDATE))'+
  'SELECT MIN(SP.IDSERVICEPARAMETERS) AS IDSERVICEPARAMETERS'+
  ' FROM SERVICES S'+
    ' INNER JOIN SERVICEPARAMETERS SP ON (S.IDSERVICES = SP.FKSERVICES)'+
    ' LEFT JOIN PERSONTYPES PT ON (SP.FKPERSONTYPES1 = PT.IDPERSONTYPES)'+
    ' INNER JOIN DIVIDEBY DB ON (SP.FKDIVIDEBYRENT = DB.IDDIVIDEBY)'+
    ' LEFT JOIN D ON (SP.IDSERVICEPARAMETERS = D.FKSERVICEPARAMETERS)'+
  ' WHERE (S.FKFOCS = :FKFOCS) AND (SP.PERIOD = :YEARS) AND (D.FKSERVICEPARAMETERS IS NULL)');
Spúšťa sa 100 x v cykle.
Pri prvom spustení trvá vykonanie dopytu okolo 2 sek. Spolu to hodí tie 2 m 40 s.  Pri ďalších spusteniach to je už len 0,05 sek. To je normálny čas. Taký mám aj v DB manažéri.
Asi nemá význam venovať sa tomu. Ale aj tak by som rád poznal dôvod takého správania sa.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3241
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Cache tabuliek serverom
« Odpověď #18 kdy: 04-10-2020, 22:23:10 »
Aspoň raz mám pravdu :P
No to nemas...
Citace
Pozriem si odkaz od pf1957. Nerozumiem tomu a to ma štve.
A je nejaky problem si to otevrit v Google Chrome a nechat Google translate prelozit do slovenciny?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5848
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Cache tabuliek serverom
« Odpověď #19 kdy: 05-10-2020, 09:00:36 »
Ale ja som nemal na mysli ten odkaz, ale samotný problém.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.