Podpora TimescaleDB
Podpora TimescaleDB v archíve
Od verzie D2000 V26.0 je v procese D2000 Archiv implementovaná podpora rozšírenia TimescaleDB (https://www.tigerdata.com/timescaledb) na platforme PostgreSQL.
Rozširenie TimescaleDB optimalizuje prácu s časovými radmi pomocou tzv. hypertabuliek (hypertables). Obyčajná tabuľka sa konvertuje na hypertabuľku, ktorá sa skladá z menších tabuliek - chunkov. Chunky obsahujúce staršie dáta sú navyše menené na stĺpcové tabuľky (columnar tables) a komprimované, čím sa znižuje množstvo miesta na disku, ktoré archívna databáza zaberá. Je to niečo podobné, ako kompresia dát trezorov, akurát v tomto prípade je možné do skomprimovaných chunkov naďalej zapisovať a kompresia je navyše efektívnejšia.
Rozšírenie sa aktivuje nastavením parametrov TimescaleDBType, TimescaleDBInterval a voliteľne TimescaleDBIntervalCps.
Parameter TimescaleDBType nastavuje, pre ktoré typy archívnych objektov sa ich dátové tabuľky skonvertujú na hypertabuľky:
0 - Žiaden (podpora TimescaleDB je vypnutá).
1 - Všetky (jednoduché aj štruktúrované archívne objekty).
2 - Štruktúrované archívne objekty (archivujúce stĺpec štruktúry aj celú štruktúru).
Pozn: Podobne ako pri časových rezoch (viď parameter DataTableSlices), v konfiguráciách s veľkým množstvom jednoduchých archívov môže zapnutie hypertabuliek na všetkých objektoch byť problematické kvôli veľkému množstvu chunkov, preto odporúčame pre takéto konfigurácie hodnotu 2.
Parameter TimescaleDBInterval udáva veľkosť časového intervalu pre jeden chunk (odporúčaná hodnota je “
30 day” alebo “1 month”).Parameter TimescaleDBIntervalCps udáva čas komprimácie pre jednotlivé chunky hypertabuľky v syntaxi intervalov PostgreSQL. Chunky, ktoré obsahujú staršie dáta, budú skomprimované. Ak tento parameter nie je zadaný, použije sa hodnota TimescaleDBInterval. Parameter teda umožňuje mať napríklad chunky s veľkosťou 1 mesiac, ale čakať 2 mesiace, kým sa budú staré dáta komprimovať.
Pozor: Hypertabuľky je možné používať spolu s časovými rezmi, čo kombinuje výhody obidvoch prístupov:
D2000 Archív vytvára časové rezy a má prehľad o tom, ktorý časový rez je pre ktorý čas.
D2000 Archív nemaže dáta v časových rezoch, ale odstraňuje celé časové rezy za hĺbkou archivácie.
Staršie časové rezy sú skomprimované.
Pred nastavením parametrov TimescaleDBType a TimescaleDBInterval musia byť splnené nasledovné podmienky:
V PostgreSQL clustri je inštalované rozšírenie TimescaleDB (dostupné na https://docs.timescale.com/self-hosted/latest/install/installation-windows/#supported-platforms).
Databázový užívateľ, ktorý je používaný na pripojenie sa k databáze (štandardne dba, možné nastaviť parametrom DbUsername), má práva SUPERUSER. Toto je možné nastaviť v D2000 Application Manageri, alebo priamo v Postgres-e (
alter role dba superuser).
Po nastavení parametrov TimescaleDBType a TimescaleDBInterval a reštarte procesu D2000 Archiv vykoná tento nevratnú konverziu archívnej databázy:
D2000 Archív doinštaluje do archívnej databázy rozšírenie TimescaleDB (
CREATE EXTENSION IF NOT EXISTS timescaledb).D2000 Archív skonvertuje všetky dátové tabuľky na hypertables, napríklad:
SELECT create_hypertable('"DT0000251"', by_range('CAS', INTERVAL '1 month'), migrate_data => true, create_default_indexes => false, if_not_exists => true)).D2000 Archív aktivuje kompresiu chunkov, napríklad:
ALTER TABLE "DT0000251" SET (timescaledb.compress = true, timescaledb.compress_orderby = ‘"CAS” DESC’)ALTER TABLE "DT0000252RC" SET (timescaledb.compress = true, timescaledb.compress_orderby = ‘"CAS” DESC’, timescaledb.compress_segmentby = '"ROWX","COL"')
Konverzia môže zabrať aj dlhší čas, podľa veľkosti archívnej databázy.D2000 Archív aktivuje politiku na kompresiu chunkov starších ako špecifikovaný časový interval (napr.
CALL add_columnstore_policy('"DT0000251"', after => INTERVAL '1 month')).D2000 Archív nakoniec vloží do tabuľky LOG_DATA položku TSDB_CONVERTED (informácia o ukončenej konverzii na TimescaleDB).
Následne pri vytváraní archívnych objektov počas behu procesu D2000 Archív sú novovytvorené tabuľky hneď konvertované na hypertabuľky.
Staršie chunky budú automaticky komprimované do stĺpcového formátu (columnar store), čo môže významne znížiť nároky na diskový priestor.
Poznámka: Zapnutím ladiacej kategórie DBG.ARCHIV.SLICES (štartovacím parametrom /E+DBG.ARCHIV.SLICES alebo z procesu D2000 System Console) je možné aktivovať ladiace výpisy pri konverzii archívnej databázy.
Poznámka: Hodnotu parametra TimescaleDBType je možné meniť z 1 na 2 a naspäť (zmena vyžaduje reštart). To ovplyvní, či sa na hypertabuľky konvertujú dátové tabuľky všetkých alebo iba štruktúrovaných archívnych objektov, ktoré budú následne vytvárané. Pokiaľ by bolo potrebné skonvertovať dátové tabuľky jednoduchých archívnych objektov na hypertabuľky, stačí ručne vymazať položku TSDB_CONVERTED z tabuľky LOG_DATA a reštartovať D2000 Archív (pri nastavení TimescaleDBType = 1) - vykoná sa opätovne konverzia všetkých dátových tabuliek, ktoré ešte neboli skonvertované.
Pokiaľ sa hodnota parametra TimescaleDBType nastaví na 0, dátové tabuľky archívnych objektov, ktoré budú následne vytvárané, nebudú konvertované na hypertabuľky.
Ďalšie informácie o práci s hypertabuľkami
Zálohovanie
Aktivácia TimescaleDB má vplyv aj na postup obnovy archívnej databázy (viď https://www.tigerdata.com/docs/deploy/self-hosted/backup-and-restore/logical-backup).
Reorganizácia
Pri vacuumovaní hypertabuľky sa automaticky vykoná vacuuming jednotlivých chunkov, takže štandardný údržbový mechanizmus archívu (reorganizácia po vymazaní ReorganizeTableRowLimit riadkov, ale nie častejšie ako každých ReorganizeTableTimeLimit hodín) je funkčný.
Diagnostika
Tell príkaz SHOW_DYN_INFO zobrazí zoznam chunkov prislúchajúcich ku archívnemu objektu, spolu s informáciou, či je chunk komprimovaný. Zobrazené informácie pochádzajú z view timescaledb_information.chunks.
Po zozname sa zobrazia štatistiky o veľkosti dát komprimovaných chunkov (z hypertable_columnstore_stats):
------------ Hypertable chunks ------------- ChunkName RangeFrom RangeTo Compressed_hyper_27_23_chunk <06-07-2026 04:00, 05-08-2026 04:00> FALSE_hyper_27_34_chunk <06-06-2026 04:00, 06-07-2026 04:00> TRUECompressed chunk statistics: original size 2686 kB, compressed size 122 kB
Tell príkaz STATISTICS_TSDB zhromaždí do súboru štatistiky o veľkosti skomprimovaných chunkov (pôvodná veľkosť/veľkosť po kompresii) všetkých archívnych objektov.
Ručná kompresia
Ak sú zapnuté časové rezy, tak ručnú kompresiu chunkov časového rezu pre konkrétny čas pre jeden alebo viacero archívnych objektov je možné vykonať príkazom COMPRESS_TSDB.
Testovanie
Podpora TimescaleDB bola testovaná na PostgreSQL 17 a 18, s verziou TimescaleDB 2.28.3 a 2.29.0.
Upgradovanie TimescaleDB
Upgradovanie TimescaleDB vyžaduje vypnutie procesu D2000 Archív ako aj vypnutie PostgreSQL servera.
Po nainštalovaní novej verzie TimescaleDB je nutné sa pripojiť k archívnej databáze (cez psql) a spustiť príkaz ALTER EXTENSION (verzia v nasledujúcom príklade zodpovedá novonainštalovanej verzii 2.29.0, predtým bola verzia napr. 2.28.3):
ALTER EXTENSION timescaledb UPDATE TO '2.29.0';