Archív - debugovanie pre vývojárov
Archív - ladenie výkonu
Táto sekcia obsahuje tipy na ladenie výkonu archívu.
- Systémová štruktúra SV._System_ArchivPerformance je určená na monitorovanie výkonu archívu - viď popis jednotlivých stĺpcov. Odporúčame archiváciu stĺpcov PendingDbRequest, PendingStatReqest, PerformedDbRequest a PerformedCalcRequest (s vhodným filtrom) a prípadne vytvorenie archívnych štatistík nad týmito hodnotami (napr. 1-minútový a hodinový sumár).
- Tell príkaz PENDING_REQUESTS skopíruje frontu požiadaviek archívu do textového súboru. Ten je možné následne analyzovať a hľadať v ňom anomálie.
- Tell príkaz STATISTICS umožňuje zistenie množstva hodnôt, ktoré boli pre jednotlivé archívne objekty uložené do databázy za posledných N hodín. Výstupom príkazu je textový súbor, ktorý je možné následne importovať napr. do Excelu a zoradiť podľa posledného stĺpca. Následne je možné optimalizovať archívy s najväčším počtom hodnôt (nastavenie filtrov, prípadne obmedzenie počtu výpočtov pre vypočítané archívy).
- Príkaz STATISTICS nezachytí, pokiaľ bola jedna hodnota menená viackrát (napríklad vkladanie hodnôt zo skriptu). Preto existujú ladiace kategórie DBG.ARCHIV.MANUAL_INSERT_VALUE a DBG.ARCHIV.MANUAL_UPDATE_VALUE nastaviteľné pomocou procesu D2000 System Console v okne Debug info. Tieto kategórie zapínajú zobrazovanie výpisov o akciách INSERTARCHARR resp. UPDATEARCHVAL (a o ručnej modifikácii hodnôt z D2000 HI). Zobrazené sú ID archívnych objektov a vkladané hodnoty (v prípade akcie INSERTARCHARR prvá a posledná hodnota z vkladaného zoznamu).
- Ďalším problémom môže byť, že hodnoty opakovane vkladané zo skriptu spôsobia veľké množstvo následných prepočtov. V takom prípade je vhodné pred vkladaním zo skriptu najskôr vykonať čítanie (GETARCHVAL) a otestovať, či hodnota už v archíve nie je uložená. K dispozícii je aj ladiaca kategória DBG.ARCHIV.MANUAL_READ_BEFORE_IU, ktorá zapína túto funkčnosť priamo v obsluhe akcií INSERTARCHARR resp. UPDATEARCHVAL a ladiaca kategória DBG.ARCHIV.MANUAL_READ_BEFORE_IU.DBG, ktorá aktivuje výpisy, keď sa zistí, že vkladaná hodnota sa už v archíve nachádza. Pomocou týchto ladiacich výpisov je možné zistiť, pre ktoré objekty vkladané zo skriptu má zmysel implementovať čítanie pred zápisom. Výpisy majú tvar
Insert value $XXX (NAME) Count= N First value=VALUE_DETAILS Last value=VALUE_DETAILS
Update value $XXX Action=MANARCHINSERT VALUE_DETAILS - Ladiaca kategória DBG.ARCHIV.MONITOR.MV zapína výpisy najstarších hodnôt, ktoré sú vkladané akciami INSERTARCHARR resp. UPDATEARCHVAL. Výpisy majú tvar
ManualValues delay (Update) XXX sec for ID $YYY: VALUE_DETAILS
resp.
ManualValues delay (Insert) XXX sec for ID $YYY: VALUE_DETAILS
Pomocou tejto kategórie (zapnutie, vypnutie) je možné zisťovať či sa do archívu nevkladajú zo skriptu staré hodnoty, ktoré následne vyvolávajú prepočty závislých archívnych objektov. - Ladiaca kategória DBG.ARCHIV.MONITOR.NV zapína výpisy najstarších hodnôt, ktoré prichádzajú do archívu ako hodnoty objektov, ktoré idú do primárnych archívov. Výpisy majú tvar
NewValues delay XXX sec for ID $YYY
Pomocou tejto kategórie (zapnutie, vypnutie) je možné zisťovať či do archívu nechodia (napr. z komunikácie) hodnoty so starou časovou značkou, ktoré následne vyvolávajú prepočty závislých archívnych objektov.
Pozn: po vypnutí ladiacej kategórie sa zobrazí najdlhšie dosiahnuté oneskorenie. - Ladiaca kategória DBG.ARCHIV.MONITOR.OV zapína výpisy najstarších hodnôt, ktoré prichádzajú do archívu ako staré hodnoty (z komunikácie, z gatewaya), ktoré idú do primárnych archívov. Výpisy majú tvar
OldValues delay XXX sec for ID $YYY, source object $ZZZ
Pomocou tejto kategórie (zapnutie, vypnutie) je možné zisťovať či do archívu nechodia staré hodnoty, ktoré následne vyvolávajú prepočty závislých archívnych objektov.
Pozn: po vypnutí ladiacej kategórie sa zobrazí najdlhšie dosiahnuté oneskorenie. - Ladiaca kategória DBG.ARCHIV.OLDVAL.COMMIT súvisí s kategóriou DBG.ARCHIV.MONITOR.OV. Zapína výpisy pri aplikačných "commitoch" (OLDVALUE COMMIT), ktoré nasledujú po skončená zápisu starých hodnôt (čítaných z komunikácie, z gatewaya), ktoré idú do primárnych archívov. Výpisy majú tvar
Old value commit TransactId XXX <time_from, time_to>
Pomocou tejto kategórie je možné zisťovať, za aké obdobie do archívu chodia staré hodnoty, ktoré následne vyvolávajú prepočty závislých archívnych objektov (tiež za toto obdobie). - Výkon archívu na platforme Linux (najmä pre vypočítané a štatistické archívy) je možné výrazne zvýšiť nasadením optimalizovanej unixODBC knižnice libodbc.so.2.0.0. Navyše odporúčame nasadenie patchov archívu z októbra 2021 a novších, ktoré majú implementované recyklovanie ODBC kurzorov, ktoré rieši pomalosti knižnice unixODBC spôsobené použitím dátových štruktúr (lineárne zoznamy) nevhodných pre aplikácie s niekoľkými desiatkami tisíc predkompilovaných kurzorov.
- Na všetkých platformách (operačných systémoch) odporúčame použiť pre potreby archivácie databázu PostgreSQL a venovať pozornosť správnemu nastaveniu jej parametrov.
- Zrýchlenie archívu pri čítaní (a teda aj pri prepočtoch štatistických a výpočítaných archívov) je možné dosiahnúť zapnutím izochrónnej cache.
- Zrýchlenie archívu pri zápise je možné dosiahnúť zvýšením počtu zapisovacích taskov - parameter WriteThreadsCount. Táto úprava vyžaduje rozšírenie licencie o High Performance Archiv.
- Zrýchlenie archívu pri čítaní je možné dosiahnúť zvýšením počtu čítacích taskov - parameter ReadThreadsCount. Táto úprava vyžaduje rozšírenie licencie o High Performance Archiv.
- Odporúčame zapnutie časových rezov aspoň pre štruktúrované archívy (DataTableSlices=2). Časové rezy zrýchlia a zjednodušia údržbu dátových tabuliek a indexov najmä pre prípad štruktúrovaných archívov.
- Tell príkaz FREEZE umožňuje zastaviť spracovanie dát v archíve na definovaný počet sekúnd a následne nahromadené požiadavky spracovať. Takto je možné uskutočniť výkonnostný test archívu (ak sa jedná o D2000 systém s redundantnými archívmi, tak ideálne na pasívnom archíve, aby pozastavenie archivácie nemalo vyplyv na funkčnosť).
Archív - debugovanie
Táto sekcia obsahuje tipy na ladenie jednotlivých archívnych objektov.
- Tell príkaz SHOW_DYN_INFO je určený na jednorazové zobrazenie informácií o konkrétnom archívnom objekte.
- Tell príkaz DI ON je určený na aktiváciu ladiacich informácií o konkrétnom archívnom objekte. Budú sa zobrazovať informácie o vkladaní hodnôt, v prípade vypočítaných a štatistických archívov o prepočtoch hodnôt a prípadne intervalov. Aktivácia ladiacej kategórie DBG.ARCHIV.DATA pre takéto archívne objekty zapne zobrazovanie vypočítaných hodnôt ako aj hodnôt zdrojových objektov idúcich do výpočtu.
- Ladiaca kategória DBG.ARCHIV.GET_VALUE_FOR_TIME slúži na zapnutie výpisov pri čítaní hodnoty pre konkrétny čas z databázy.
- Ladiaca kategória DBG.ARCHIV.READ zapína informácie o externých požiadavkách na čítanie z archívu (napr. z procesu D2000 HI alebo ako dôsledok akcií GETARCH*). Je možné tak sledovať vplyv čítania (napr. zo skriptu) na výkon D2000 Archívu.
- Ladiaca kategória DBG.ARCHIV.READ.TREZOR zapína informácie o požiadavkách na čítanie z trezorovej databázy. Keďže trezorových databáz môže byť pripojených veľa, čítanie z trezorov môže výrazne prispieť k záťaži D2000 Archívu, SQL databázy a I/O subsystému.
- Ladiaca kategória DBG.ARCHIV.READ.EMPTY_EXTERNAL zapína informácie o požiadavkách na čítanie z archívu (napr. z procesu D2000 HI alebo ako dôsledok akcií GETARCH*), ktoré nevrátili žiadne dáta (tj. týkali sa prázdnych archívov). Tieto požiadavky v dôsledku optimalizácii v archíve nespôsobia čítanie z archívnej databázy.
- Ladiaca kategória DBG.ARCHIV.READ.EMPTY_INTERNAL zapína informácie o požiadavkách na čítanie generovaných priamo archívom (pri výpočtoch vypočítaných/štatistických archívov), ktoré nevrátili žiadne dáta (tj. týkali sa prázdnych archívov). Tieto požiadavky v dôsledku optimalizácii v archíve nespôsobia čítanie z archívnej databázy.
Archív - debugovanie pre vývojárov
Nasledujúce ladiace kategórie sú určené pre vývojárov D2000.
- Ladiaca kategória DBG.ARCHIV.CACHE zapína ladiace informácie týkajúce sa prácou s archívnou cache (vkladanie, mazanie).
- Ladiaca kategória DBG.ARCHIV.CACHE.HIT zapína ladiace informácie týkajúce sa neúspešného čítania z archívnej cache.
- Ladiaca kategória DBG.ARCHIV.COMPRESS.TREZOR zapína ladiace informácie týkajúce sa kompresie dát trezorov.
- Ladiaca kategória DBG.ARCHIV.DISK_SPACE zapína ladiace informácie týkajúce sa zisťovania obsadeného miesta v archívnej databáze.
- Ladiaca kategória DBG.ARCHIV.SLICES zapína ladiace informácie týkajúce sa vytvárania časových rezov.
- Ladiaca kategória DBG.ARCHIV.TRANSTREE zapína ladiace informácie týkajúce sa stromu transakcií. Vzhľadom k existencii viacerých zapisovacích taskov (viď parameter WriteThreadsCount) je nutné synchronizovať prepočty vypočítaných a štatistických archívnych objektov, aby prebiehali v správnom poradí. Na toto slúži strom transakcií.
- Ladiaca kategória DBG.ARCHIV.WARNTRANS zapína ladiace informácie týkajúce sa neukončených transakcií v strome transakcií. V správne fungujúcom archíve sú všetky transakcie ukončované korektne.
- Ladiace kategórie DBG.ARCHIV.WRITECACHE a DBG.ARCHIV.WRITECACHE.DETAILS zapínajú ladiace informácie týkajúce sa "write cache". Toto je krátkodobá cache určená na uchovávanie hodnôt, ktoré boli zapísané do databázy, ale nebol ešte vykonaný commit (a teda nie sú ešte viditeľné inými taskami).
- Ladiaca kategória DBG.ARCHIV.WARN_ZERO zapína ladiace informácie týkajúce sa porovnávania hodnôt, pokiaľ sú takmer identické (viď parameter AlmostZero).