Časové rezy v archíve

Od verzie D2000 V8.0 je v procese D2000 Archiv implementovaná podpora časových rezov.

Od verzie D2000 V10.1.39 (patche z 22.6.2016 a novšie) je v procese D2000 Archiv implementovaná podpora časových rezov iba pre štruktúrované archívy (t.j. jednoduché archívy fungujú pôvodným spôsobom).
Poznámka: tento mód bol implementovaný kvôli vlastnostiam Oracle a PostgreSQL databáz. Veľké množstvo malých tabuliek spôsobuje v prípade Oracle 11g výraznú spotrebu pamäte (a prípadne výskyt ORA-600 chýb) a v prípade PostgreSQL veľké množstvo malých súborov na disku.

Pokiaľ sa neaktivujú časové rezy, tak archív pracuje pôvodným spôsobom:

Problém s výkonnosťou nastával najmä pri štruktúrovaných archívoch, ktorých tabuľky mohli dosahovať značné veľkosti (až niekoľko GB na produkčných systémoch) a reorganizácia takýchto tabuliek trvala až desiatky minút a výrazne zaťažovala procesor aj disky.
Riešením týchto problémov je "narezanie" tabuliek na časové rezy (zatiaľ s konštantnou veľkosťou 30 dní). T.j. každých 30 dní sa vytvorí pre každý archívny objekt nová tabuľka v databáze (napr. pre jednoduchý archív s HOBJ=155 vzniknú tabuľky DT0000155_1, DT0000155_2, DT0000155_3, atď). Pôvodná tabuľka (napr. DT0000155) sa použije pre ukladanie dát starších ako je čas konverzie archívnej databázy a nazýva sa nulový rez.

Implementácia časových rezov umožnila:

Zapnutie časových rezov a konverzia archívnej databázy


Prechod na archív s časovými rezmi spôsobí nastavenie parametra DataTableSlices na hodnotu 1 (časové rezy pre všetky archívne objekty) resp. na hodnotu 2 (časové rezy pre štruktúrované archívne objekty).
Pri konverzii archívnej databázy robí archív nasledovné činnosti:

Poznámka: Konverzia archívnej databázy je nevratná!
Preto odporúčame zálohovanie archívnej databázy pred zmenou parametra DataTableSlices. Záloha databázy + dáta z konvertovanej databázy (s pomocou arcsynchro) môžu byť použité na návrat k archívu bez časových rezov.

Správanie sa archívu v režime časových rezov


Po zapnutí časových rezov archív ešte nejaký čas (<= 30 dní) zapisuje dáta do nulových rezov, keďže časový rez č. 1 sa vytvoril s časom v budúcnosti. Následne začnú chodiť dáta s časmi, ktoré sú vo vnútri časového rezu č. 1 a budú archivované v reze č. 1. V čase rovnajúcom sa stredu časového rezu (t.j. čas začiatku časového rezu + 15 dní) sa vygenerujú požiadavky na vytvorenie ďalších časových rezov. Tieto požiadavky vykonáva archív na nízkej priorite, pričom časový rez pre archívny objekt vytvorí iba vtedy, pokiaľ bola počas behu archívu pre tento objekt archivovaná aspoň jedna hodnota.
Pokiaľ príde do archívu hodnota pre čas, pre ktorý neexistuje ešte časový rez, tento sa vytvorí hneď a hodnota sa doňho vloží.

Pri periodickom mazaní dát je možné zvlášť riadiť mazanie v pôvodnej tabuľke - nulovom reze (parameter DeleteInSlice0) a v ostatných časových rezoch (parameter DeleteInSlices). Odporúčané je ponechanie prednastavených hodnôt, t.j. DeleteInSlice0=1 (dáta v nulovom reze sa mažú) a DeleteInSlices=0 (dáta v ostatných rezoch sa nemažú, ale rez je vyprázdnený pomocou TRUNCATE TABLE, keď sa ocitne za hĺbkou archivácie).
Časový rez, ktorý je vyprázdnený, sa následne označí ako voľný (čas začiatku sa nastaví na "1.1.1972") a archív ho recykluje, keď bude potrebovať ďalší časový rez pre archívny objekt, ku ktorému rez patrí.

Poznámka: Archív podporuje iba jeden voľný časový rez pre každý archívny objekt. Pokiaľ by vzniklo viac voľných časových rezov (napr. po zmenšení hĺbky archivácie objektu), budú všetky voľné časové rezy okrem prvého vymazané (z tabuľky ARC_SLICE aj ako príslušné databázové tabuľky), takže nedôjde k tomu, že archívna databáza bude obsahovať zbytočné prázdne tabuľky časových rezov.
Nulový rez je výnimkou z tohto pravidla a bude vždy zachovaný.

Pri čítaní archívnych hodnôt z databázy sa číta z jedného alebo viacerých časových rezov (podobne ako pri čítaní z trezorov sa číta z jedného alebo viacerých trezorov).

Zoznam a podrobnosti o časových rezoch objektu sa dá získať tell príkazom SHOW_DYN_INFO.
Rozšírené informácie o časových rezoch (o vytváraní, mazaní, recyklovaní) vypisuje archív pri zapnutej ladiacej kategórii DBG.ARCHIV.SLICES štartovacím parametrom /E+DBG.ARCHIV.SLICES alebo pomocou procesu D2000 System Console v okne Debug info.

Tell príkaz REORGANIZE je rozšírený o podporu časových rezov a umožňuje reorganizáciu vybraného časového rezu, všetkých časových rezov alebo časového rezu pre aktuálny čas.

Utilita arcsynchro je rozšírená o podporu čítania a zápisu časových rezov ako aj o podporu vytvárania časových rezov pri synchronizácii archívnych databáz. Dokáže čítať z databázy bez aj s časovými rezmi a následne plátať databázu bez aj s časovými rezmi.