Kompresia dát trezora trezora je implementovaná na platforme PostgreSQL. Vykonáva optimalizáciu jeho štruktúry a niekoľkokrát zmenší jeho veľkosť. Do komprimovaného trezora už nie je možné zapisovať (ani utilitou arcsynchro). Kompresia dát je dostupná v D2000 verzii 21 a vyššej. Nastavenie parametra TrezorCompress = 1 zapína kompresiu dát trezora po jeho odpojení.

Aj staršie trezory je možné skomprimovať „ručne” pomocou tell príkazu TREZOR COMPRESS. Je podporený aj opačný proces – dekompresia pomocou tell príkazu TREZOR DECOMPRESS.

Rýchlosť čítania z komprimovaných trezorov je porovnateľná s nekomprimovanými. V niektorých hraničných prípadoch (čítanie konkrétnej hodnoty v čase) môžu byť komprimované trezory pomalšie. V iných prípadoch môže byť čítanie komprimovaných dát rýchlejšie (záleží od pomeru rýchlosti a záťaže I/O subsystému a procesora). Navyše kompresia dát umožní uchovávanie väčšieho množstva dát v pamäti (v cache operačného systému a PostgreSQL).

Prácu s komprimovanými trezormi je možné si vyskúšať „na nečisto“. Nastavenie parametra TrezorCompressKeep = 1 spôsobí, že pri kompresii vzniknú tabuľky s komprimovanými dátami (CDATA, DATA0), ale pôvodná tabuľka (DATA) sa nevymaže. Po kompresii sa následne čítajú komprimované dáta. Príkazom TREZOR DECOMPRESS. je možné sa veľmi rýchlo vrátiť k pôvodnej štruktúre trezora, keďže nie je nutné vykonať dekompresiu, ale stačí vymazať tabuľky s komprimovanými dátami.

Praktické testy ukázali, že kompresia dát v trezore prebieha rýchlejšie, ak sú predtým dáta upratané. Preto existuje parameter TrezorCompressReorg, ktorý je prednastavený na hodnotu 1 a ktorý aktivuje reorganizáciu dáta pred kompresiou.

Výpis trezorov príkazom LIST_TREZOR ukazuje pri komprimovaných trezoroch príznak cps:

Received TELL command : LIST_TREZOR
List all
 List of existing trezors:
--------------------------------------------------------------------------
 ID | Data start(UTC)| Data end(UTC)  |     Status                       |
--------------------------------------------------------------------------
0134 31-05-2020 22:00 30-06-2020 22:00 being used for writing
0133 30-04-2020 22:00 31-05-2020 22:00 mounted read-only  cps
0132 31-03-2020 22:00 30-04-2020 22:00 mounted read-only  cps
0131 29-02-2020 23:00 31-03-2020 22:00 mounted read-only 
0130 31-01-2020 23:00 29-02-2020 23:00 mounted read-only 

Obmedzenie PostgreSQL

Komprimované trezory na PostgreSQL podliehajú nasledovnému obmedzeniu: veľkosť dát jedného archívneho objektu (resp. jednej položky štruktúrovaného archívu), ktoré sa ukladajú do jedného riadku komprimovanej dátovej tabuľky CDATA, musí byť menšia ako 1 GB. V opačnom prípade kompresia skončí s chybou a je vypísané ID objektu, ktorý ju spôsobil. Príklad:

[2021-04-05 20:36:52.371]E MES_TREZOR_20 ExecSqlCommand insert into cdata with avgc as (select '20090701 000000.000'::timestamp as cmin, '20090801 000000.000'::timestamp as cmax,'20090701 000000.000'::timestamp + ('20090801 000000.000'::timestamp - '20090701 000000.000'::timestamp)/2 as c), sdata as (SELECT * from data where "ID"= 1309454 and "ROW"= 0 and "COL"= 0 order by "CAS") select "ID", "ROW", "COL", avgc.c, array_agg( ((extract (epoch from "CAS"-avgc.c)*1000)::integer, "VALUE", "STATUS", "LIMIT_STATUS", "ARCHIV_STATUS", "FLAGS")::d2trzitem) from sdata, avgc where "CAS" between avgc.cmin and avgc.cmax + '1 hour'::interval group by "ID", "ROW", "COL", avgc.c
(54000)ERROR: array size exceeds the maximum allowed (1073741823);

[2021-04-05 20:36:52.381]E Error inserting cdata for 20 ID=$1309454


Popis konfiguračných parametrov kompresie dát trezorov pre platformu PostgreSQL:

Ak chcete vymazať komprimované dáta a zachovať nekomprimované, použite nasledovný postup:

- Príkazom SET_OPTION TREZOR_COMPRESS_KEEP OFF nastavte hodnotu parametra TrezorCompressKeep na 0.

- Príkazom TREZOR DECOMPRESS vykonajte dekompresiu dát trezora (dekompresia prebehne rýchlo, keďže budú iba vymazané tabuľky s komprimovanými dátami - CDATA, DATA0).

Ak chcete zachovať komprimované dáta a vymazať nekomprimované, použite nasledovný postup:

- Príkazom TREZOR DECOMPRESS vykonajte dekompresiu dát trezora (dekompresia prebehne rýchlo, keďže bude iba trezor označený ako dekomprimovaný. Vďaka hodnote parametra TrezorCompressKeep=1 nebudú vymazané tabuľky s komprimovanými dátami - CDATA, DATA0).

- Príkazom SET_OPTION TREZOR_COMPRESS_KEEP OFF nastavte hodnotu parametra TrezorCompressKeep na 0.

- Príkazom TREZOR COMPRESS vykonajte kompresiu dát trezora (kompresia prebehne rýchlo, keďže sa použijú existujúce dáta v tabuľkách s komprimovanými dátami). Kompresia vymaže tabuľku s pôvodnými nekomprimovanými dátami (DATA).

Postup kompresie starých trezorov