26.3.2024

Archív - migrácia historických databáz z Oracle na PostgreSQL

O archívoch a trezoroch

Štandardnou vlastnosťou archívnych subsystémov (historianov) v SCADA systémoch je, že ich historické dáta sa uchovávajú iba konfiguračne definovaný čas (mesiac, rok, 5 rokov..). Prax si vyžiadala zavedenie aj “neobmedzenej” archivácie a to ešte v dobe, keď boli disky malé a drahé. Ako riešiť takýto rozpor? Autori D2000 Archívu implementovali vlastnosť, ktorú nazvali trezorovanie. Archív so zapnutým trezorovaním ukladá dáta do štandardnej archívnej databázy a paralelne aj do tzv. trezoru, pričom trezorovanie sa dá konfiguračne povoliť alebo zakázať na každom archívnom objekte. Trezor sa po vytvorení napĺňa definovaný čas (spravidla mesiac, ale môže to byť aj týždeň alebo 10 dní) a následne sa odpojí a začne sa napĺňať nový trezor. Po naplnení je možné trezor odkopírovať preč, prípadne napáliť na CD a vložiť do reálneho trezoru, ako sa to robilo u prvého zákazníka s touto funkčnosťou - odtiaľ vznikol aj názov. Staré trezory je možné znovu pripojiť a sprístupniť dáta na čítanie.

.. a o ich migrácii

Vo februári 2022 sme realizovali fázu migrácie trezorov v rámci väčšieho projektu, ktorý sa týka migrácie celého MES systému.

Pôvodný MES beží na D2000 verzii 9.0.20 na platforme Windows. Jeden z redundantných archívov má zapnuté trezorovanie s periódou 1 mesiac. Trezory 1-230 sú za obdobie 1.1.2003 až 31.1.2022, tj. za 18 rokov. Ako archívna/trezorová databáza je použitá Oracle 11g.

Nový MES systém bude prevádzkovaný na D2000 verzii 21.1.72 na platforme Linux. Jeden z redundantných archívov má opäť zapnuté trezorovanie s periódou 1 mesiac, trezory sú v databáze PostgreSQL 13.

Keďže sa jedná po pomerne veľkú aplikáciu, trezory sú rozdelené na tzv. trezorové segmenty. To znamená, že paralelne sa napĺňa 8 trezorových segmentov (0-7). Na platforme Oracle sú trezory implementované ako samostatné tabuľkové priestory (tablespaces). Obrázok 1 ukazuje segmenty trezorov 230 a 231, každý tabuľkový priestor je na disku reprezentovaný jedným súborom. Čísla trezorov (230-231), čísla trezorových segmentov (S00-S07) aj dátum vzniku trezora (YYYYMMDD) sú pre ľahšiu orientáciu súčasťou názvov súborov.

Obrázok 1 – Disk s Oracle trezormi na pôvodnom serveri obsahuje 4.7 TB dát. V januári 2022 pribudlo 35 GB dát.

Administrátorský nástroj D2000 Sysconcole umožňuje správcom systému pripojiť sa k archívu a vypýtať si stav jednotlivých trezorov. Obrázok 2 ukazuje, že všetky staršie trezory sú pripojené na čítanie a posledný trezor (231) sa aktuálne napĺňa.

Obrázok 2 - Začiatok a koniec výpisu zoznamu trezorov na pôvodnom MES systéme.

Migrácia 4.7 TB trezorových dát trvala takmer 2 týždne. Pri migrácii bola použitá utilita arcsynchro, ktorá bola spúšťaná na novom MES serveri. Paralelne boli spustené až 4 arcsynchro, každý kopíroval dáta z jedného zdrojového trezorového segmentu. Obrázok 3 ukazuje koniec výpisu synchronizácie jedného trezorového segmentu. Výpis ukazuje, že bolo prenesených 231 miliónov hodnôt.

Obrázok 3 – Koniec výpisu arcsynchro jedného trezorového segmentu. Každé z „i“ vo výpise reprezentuje 1000 vložených hodnôt.

Keďže Oracle má úspornejšie ukladanie dát (podporuje index-organizované tabuľky a má menšiu réžiu na riadok), trezory so 4.7 TB dát by sa v PostgreSQL databáze zväčšili na cca 15 TB. Na druhej strane, implementácia kompresie trezorov na platforme PostgreSQL použité miesto podstatne zmenšila. Ako podstatne? Obrázok 4 ukazuje finálny stav po skončení migrácie. Všetky PostgreSQL trezory zaberajú 755 GB dát. To je oproti 4700 GB Oracle dát veľmi pekná úspora diskového miesta!

Obrázok 4 - Disky na novom Mes serveri. Disk /trezors má využitých 755 GB

Kompresia trezorov bola vykonávaná priebežne – aj kvôli tomu, že na cieľovom systéme sme mali k dispozícii „iba“ 8 TB diskového priestoru. Na rozdiel od archívnej databázy na trezory boli použité štandardné HDD disky. Aká bola rýchlosť kompresie trezorov? To ukazuje posledný obrázok.

Obrázok 5 -  Výpisy z kompresie segmentov 7 trezorov 222 až 224

Kompresia 21 GB trezorových segmentov na platforme PostgreSQL trvala cca 3 minúty a 5 sekúnd. Výsledkom bol komprimované trezorové segmenty s veľkosťami 1024 – 1043 GB, tj. kompresný pomer bol cca 20:1.

Záver

Podľa môjho názoru je kompresia trezorov na platforme PostgreSQL „killer feature“ pre každého, kto trezory používa. Niekoľkonásobné ušetrenie veľkého diskového priestoru je ďalším významným argumentom pre migráciu na novú verziu D2000.

Iné blogy