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
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
TrezorCompress - zapnutie kompresie dát trezora. Kompresia dáta prebehne pri odpájaní trezora.
Parameter môže byť zmenený za behu tell príkazom SET_OPTION TrezorCompress.
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).
TrezorCompressReorg - reorganizácia dát trezora pred kompresiou. Tento parameter má prednastavenú hodnotu 1 - v praxi sa ukazuje, že je efektívnejšie a rýchlejšie najskôr zreorganizovať dáta (SQL príkazom CLUSTER DATA) a až následne vykonať ich kompresiu. Hodnota 0 vypína reorganizáciu dát trezora pred kompresiou. Vypnutie reorganizácie pred kompresiou nie je odporúčané.
Parameter môže byť zmenený za behu tell príkazom SET_OPTION TrezorCompressReorg.
TrezorCompressOrder - parameter sa týka čítania z trezorov s komprimovanými dátami. Tento parameter udáva, či pri čítaní dát z komprimovaného trezora je nutné použiť zoradenie podľa času. Keďže sú dáta zoradené pri kompresii, štandardne je možné nechať parameter na hodnote 0, čo zrýchľuje čítanie z komprimovaného trezora (vynecháva sa ORDER BY).
Parameter môže byť zmenený za behu tell príkazom SET_OPTION TrezorCompressOrder.