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

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
Cache tabuliek serverom
« kdy: 30-09-2020, 13:24:31 »

Otázka je založená na tomto príspevku
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).
1) Moja konfigurácia:

  • OS a FB server je na SSD
  • aplikácia a DB je na HDD
2) Predpokladám:
  • serverová aplikácia - všetko sa deje na SSD. Pri predpoklade, že tam je aj DB
  • embeded - všetko sa deje na HDD
3) Čo rozhoduje pri embeded verzii o výbere disku?
  • umiestnenie DB
  • umiestnenie knižníc/programu
Ako to je v prípade obrovských tabuliek? Myslím tým v GB! Tu asi server a aplikácia bežia nonstop.
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 1301
  • Karma: 51
    • Verze Delphi: 10.3
Re:Cache tabuliek serverom
« Odpověď #1 kdy: 30-09-2020, 13:28:31 »
Podstatné je umístění DB a případně složky, kde si Firebird vytváří dočasné soubory.
SSD má dnes snad i většina normálních počítačů a věřím, že za pár let bude HDD spíš výjimka.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Cache tabuliek serverom
« Odpověď #2 kdy: 30-09-2020, 13:45:48 »
Citace
a případně složky, kde si Firebird vytváří dočasné soubory.
Predpokladám, že to je určené konfiguračným súborom.
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 1301
  • Karma: 51
    • Verze Delphi: 10.3
Re:Cache tabuliek serverom
« Odpověď #3 kdy: 30-09-2020, 13:47:37 »
Citace
a případně složky, kde si Firebird vytváří dočasné soubory.
Predpokladám, že to je určené konfiguračným súborom.

Ano, TempDirectories.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Cache tabuliek serverom
« Odpověď #4 kdy: 30-09-2020, 14:37:59 »
Keďže predvolená hodnota je C:...\temp\, tak mi to beží na SSD. Ten je zaplnený na 25 %.
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 1301
  • Karma: 51
    • Verze Delphi: 10.3
Re:Cache tabuliek serverom
« Odpověď #5 kdy: 30-09-2020, 14:49:30 »
Keďže predvolená hodnota je C:...\temp\, tak mi to beží na SSD. Ten je zaplnený na 25 %.

Jenže ten temp to možná ani nepoužívá. Zkus na C: dát celou databázi.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Cache tabuliek serverom
« Odpověď #6 kdy: 30-09-2020, 14:55:17 »
Poor
Rated 1 time
Podľa toho čo som čítal, tak by mal.
Niekedy to skúsim. Teraz nie, lebo zisťovanie všetkých ciest mám tvrdo naviazané na umiestnenie aplikácie.
To by si vyžadovalo zásah do kódu a to nie je na programe dňa.
Na druhú stranu to tam môžem dočasne dať ako konštantu.
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Cache tabuliek serverom
« Odpověď #7 kdy: 02-10-2020, 16:46:33 »
Keďže predvolená hodnota je C:...\temp\, tak mi to beží na SSD. Ten je zaplnený na 25 %.
Tak to som poriadne kecal.
Vytvoril som a nastavil v C:\Program Files\Firebird\Firebird_3_0\firebird.conf hodnotu "TempDirectories = c:\temp". Stále to zapisuje na D, kde je DB.
Nejakú inú cestu, vzťahujúcu sa k danému problému, som nenašiel.
Ostatných konfiguračných súborov som sa nedotkol.
Prekopírovanie DB na C som ešte neskúšal. To si nechávam ako poslednú možnosť.
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 1301
  • Karma: 51
    • Verze Delphi: 10.3
Re:Cache tabuliek serverom
« Odpověď #8 kdy: 02-10-2020, 21:29:13 »
Keďže predvolená hodnota je C:...\temp\, tak mi to beží na SSD. Ten je zaplnený na 25 %.
Tak to som poriadne kecal.
Vytvoril som a nastavil v C:\Program Files\Firebird\Firebird_3_0\firebird.conf hodnotu "TempDirectories = c:\temp". Stále to zapisuje na D, kde je DB.
Nejakú inú cestu, vzťahujúcu sa k danému problému, som nenašiel.
Ostatných konfiguračných súborov som sa nedotkol.
Prekopírovanie DB na C som ešte neskúšal. To si nechávam ako poslednú možnosť.

Používáš v aplikaci tenhle Firebird server, nebo embedded?

Server se musí po změně .conf restartovat.
Embedded má svůj .conf jinde (nejspíš u aplikace).

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Cache tabuliek serverom
« Odpověď #9 kdy: 03-10-2020, 10:22:35 »
Citace
Embedded má svůj .conf jinde (nejspíš u aplikace).
Potom je problém tu.
Žiaden tam nieje. Skopírovaním zo serveru sa nič nezmenilo.
Asi to je natvrdo. Tam kde je DB.
Idem si to naštudovať :)
« Poslední změna: 03-10-2020, 10:32:17 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3343
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Cache tabuliek serverom
« Odpověď #10 kdy: 03-10-2020, 20:24:56 »
Asi to je natvrdo. Tam kde je DB.
DB je implicitne tam kde aplikace, coz neni dobre, protoze aplikace ma byt v read-only adresari Program Files. Da se to nakonfigurovat v .conf souboru u .DLL polozkou RootDirectory.

Embedded je SuperServer, takze teoreticky by mohly fungovat nektera nastaveni pro SuperServer, to je treba vyzkouset.
Jinak temporary folder se pouziva pri trideni apod., kdyz se to nevejde do pameti, takze se to vubec nemusi uplatnit a by default bych ho na woknech ocekaval na GetTempPath().

Krome obecneho zrychleni disku ev. zkusit sahnout na velilkosti stranek apod. s tim u embedded verze nic nenadelas, protoze server zije v ramci tvoji aplikace a kdyz ji chcipnes, tak uvolni pouzitou pamet a ukonci se. A pri dalsim spusteni si zase bude nacitat vsechno do pameti.

« Poslední změna: 03-10-2020, 20:26:50 od pf1957 »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Cache tabuliek serverom
« Odpověď #11 kdy: 03-10-2020, 20:52:21 »
Citace
DB je implicitne tam kde aplikace, coz neni dobre, protoze aplikace ma byt v read-only adresari Program Files. Da se to nakonfigurovat v .conf souboru u .DLL polozkou RootDirectory.
To sme už preberali. Budem to riešiť pri tvorbe inštalačky.
Citace
Jinak temporary folder se pouziva pri trideni apod., kdyz se to nevejde do pameti, takze se to vubec nemusi uplatnit a by default bych ho na woknech ocekaval na GetTempPath().
To som sa už dočítal. Cestu som nastavil provizórne. Len kvôli testovaniu a prístupovým právam.
Citace
A pri dalsim spusteni si zase bude nacitat vsechno do pameti.
Ten cache tabuliek ostáva.
Keďže tu dlho nikto neodpovedal, tak som dal otázku aj D-Praxis. Ale hneď nato spustili údržbu a web je aj zajtra odstavený :D .
Ten problém v nie je zaujímavý z pohľadu programu, lebo všetko budem inštalovať na disk C - podľa odporúčaní (tu a MS). Ale moja zvedavosť mi nedá a chcem vedieť, či to má riešenie. Veľkosť stránky a podobné veci nechcem meniť. V mojom prípade to nepovažujem za potrebné.
Len pre zaujímavosť zopakujem. Prvý štart aplikácie: HDD ~3 min, SSD < 10 sec.
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Cache tabuliek serverom
« Odpověď #12 kdy: 04-10-2020, 13:13:55 »
Obrátil som sa priamo na FB, a dostal som takéto odpovede. Od dvoch autorov.
.

1) Samotný Firebird nič také nerobí. - Tu sa hovorí o cache tabuliek na disk
.
V každom prípade možno uvažujete o vyrovnávacej pamäti súborového systému, ktorá sa deje * v pamäti *
.
2)Tabuľky sa na disku „neukládajú“, nastavenie TempDirectories ovplyvňuje iba dočasné súbory, napr. Na triedenie veľkých množín výsledkov.
Tabuľky sú * uložené * v databázovom súbore, takže ak je váš databázový súbor na D: \, potom sú tabuľky na D: \.
.
Pomocou nástroja Resource Monitor a / alebo Process Monitor môžete zistiť, čo sa skutočne deje.
.
Obidvaja sa zhodujú, že žiaden cache sa nekoná! Asi budem musieť použiť/naštudovať monitor
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 1301
  • Karma: 51
    • Verze Delphi: 10.3
Re:Cache tabuliek serverom
« Odpověď #13 kdy: 04-10-2020, 13:38:46 »
O cache tabulek na disk se tady nemluvilo.

Pokud vím, Firebird používá:

- svoji cache databázových stránek: ve firebird.conf se pomocí DefaultDbCachePages nastavuje, kolik jich smí v paměti mít (Number of cached database pages). To je v RAM. Např.:
DefaultDbCachePages = 100000

- dočasné soubory, které se používají např. pro třídění velkého množství záznamů; jejich umístění se ve firebird.conf určuje pomocí TempDirectories, např.:
TempDirectories = c:\temp;d:\temp
Podívej se i na: TempBlockSize, TempCacheLimit
Je klidně možné, že ty dočasné soubory se u Tebe vůbec nevytvářejí, protože se vše vejde do RAM.

No a kromě toho operační systém má svoji vlastní cache, takže pokud se nedávno něco četlo z disku a má se to číst znovu, ve skutečnosti k fyzickému čtení třeba nedojde, protože to operační systém ještě má v paměti a poskytne to z ní.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3343
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Cache tabuliek serverom
« Odpověď #14 kdy: 04-10-2020, 17:45:04 »
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  :o

FB samozrejme cacheuje viz https://firebirdsql.org/file/documentation/html/en/firebirddocs/fbcache/firebird-cache.html a rada jiných dokumentu.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
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.08
Expert na kladenie nejasne formulovaných otázok.

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 1301
  • 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ů: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
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.08
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3343
  • 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ů: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
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.08
Expert na kladenie nejasne formulovaných otázok.