The D2000 Archive process maintains referential integrity between historical values not only at the object level (e.g., the primaryhistorical value H.Sec is used as a source for the statistical historical value H.Sec_Avg1min), but also at the item level of structured archives (e.g., the fifth row of the column historical value H.SV.Speed, which archives one column of the SV.Speed structure, is used as a source for the statistical historical value H.SV.Speed_Avg1min).
Referential integrity at the item level of structured historical values is important for optimizing calculations. For example, after the user edits the historical value in the aforementioned fifth row of H.SV.Speed, the fifth row of H.SV.Speed_Avg1min will be automatically recalculated for the minute in which the changed value is located, but there is no reason to recalculate other rows of the structured archive H.SV.Speed_Avg1min. This is also the reason why expressions in calculated archives must contain a specific index, and a local variable cannot be used for indexing (unlike structured eval tags). To solve this scenario, the LOOP_TEMPLATE macro was implemented, which replaces the cycle (DO_LOOP), and D2000 Archive will expand it:
- after the process starts
- after saving the calculated historical value
- after changing the size of the structured variable that is used in the calculated historical value
Recalculation of statistical and calculated historical values is performed as a result of:
- A change in the value of the primary archive object that is used in a statistical or calculated historical value.
- An explicit request for recalculation, which can be the RECALC command (entered by the user or using the COMMAND action) or the CALCONDEMANDSTAT action.
D2000 Archive automatically maintains the consistency of historical values data, if their Calculation is set to Continuous, but not if it is set to On Demand. In the CALCONDEMANDSTAT action, the parameter bCalcDepend=@False can be used to specify that dependent objects should not be recalculated; similarly, the RECALC command has the NODEPEND option with the same meaning.
If we recalculate multiple archive objects, the following optimizations occur in the calculation:
Optimalizácia jedného prepočtu
Ak je zapnutá izochrónna cache (parameter archívu IsochronousCache) optimalizujú sa výpočty, ktorých celý interval dát sa nachádza v archívnej cache. Ak je zapnutý parameter RecalcOptimize, optimalizujú sa aj dáta mimo izochrónnej cache. Optimalizovaný prepočet spočíva v načítaní pôvodných cieľových dát pred výpočtom a následne v porovnaní pôvodných dát s prepočítanými. Dáta, ktoré sú identické, nie sú mazané a znovu vkladané.
V ideálnom prípade (ak sú vypočítané úplne rovnaké dáta, ako boli predtým) optimalizácia zabráni vymazaniu intervalu dát v cieľovom archíve a ich opätovnému vloženiu. V menej ideálnom prípade dôjde k tomu, že aspoň časť dát je identická. Vtedy budú mazané a vkladané dáta od prvej rozdielnej hodnoty až po koniec intervalu.
V prípade potreby sa dá optimalizácia vypnúť nastavením archívu RTM.ARCHIV.OPTIMIZE_RECALC (štartovacím parametrom /E-RTM.ARCHIV.OPTIMIZE_RECALC alebo za behu v System Console).
Optimalizácia viacerých prepočtov
Pre potreby bilancovania podporných služieb v systéme MARI a PICASSO bola do procesu D2000 Archív zavedená v októbri 2025 ďalšia optimalizácia. Pokiaľ sa počíta viacero na sebe závislých archívnych objektov a celý prepočet jedného z archívnych objektov skončil ako identický (t.j. nebolo treba mazať ani vkladať nové hodnoty), tak na ňom závíslé štatistické archívne objekty tiež nebudú prepočítavané. Podobne, ak všetky výpočty zdrojových archívov (štatistických, vypočítaných), ktoré vstupujú do vypočítaného archívu, boli vyoptimalizované, tak dotyčný vypočítaný archív sa tiež nebude počítať.
Táto optimalizácia môže spôsobiť problém v jednom prípade: ak časť vypočítaných/štatistických archívov má nastavený Výpočet ako Priebežný a na nich závislé zase Na požiadanie. Tie prvé sa počítajú aj priebežne, automaticky; takže pri užívateľsky vyvolanom prepočte budú vyoptimalizované - a následné výpočty závislých archívov (počítaných na požiadanie) sa neuskutočnia. Tento problém má možné riešenia:
- Tell príkaz RECALC má voľbu FORCEONDEMAND, ktorá vynucuje prepočet závislých archívnych objektov, ak majú nastavený Výpočet ako Na požiadanie.
- Prekonfigurovanie všetkých závislých archívov ako priebežne počítaných (toto môže mať ale negatívny vplyv na výkon D2000 Archívu).
- Prekonfigurovanie všetkých závislých archívov ako počítaných na požiadanie (toto môže spôsobiť problém, ak sú niektoré z vypočítaných archívoch potrebné priebežne).
- Pridanie triggra (primárneho archívu) do výrazu na požiadanie počítaných archívov. Takýto trigger spôsobí, že budú vypočítané, keďže primárny archív sa síce nepočíta, ale vždy vráti, že nebol zoptimalizovaný.