Ako premazávať veľké množstvo záznamov v agende Vykonané zmeny
Tento návod poradí, ako postupovať v prípade, keď je v databáze veľké množstvo záznamov vykonaných zmien a chceme ich odstrániť z dôvodu zmenšenia veľkosti záloh databázy. Tým dosiahneme aj urýchlenie zálohovania.
Väčší počet záznamov vzniká v tabuľke vykonaných zmien obvykle kvôli nejakej automatickej akcii, ktorá pravidelne aktualizuje hodnoty na objektoch, nad ktorými je zapnuté sledovanie zmien.
Veľký počet záznamov (milióny) v agende Vykonané zmeny môže mať za následok zväčšenie veľkosti databázy o GB a tým predlžovanie času zálohovania. Pri veľkom množstve je preto vhodné zvážiť premazanie historických záznamov o vykonaných zmenách.
Odstránenie väčšieho počtu záznamov priamo z agendy Vykonané zmeny je pre viac ako 1000 záznamov nevhodné vykonávať používateľsky, a to z dôvodu časovej náročnosti danej akcie.
Preto bola do systému doplnená možnosť vykonania odstránenia záznamov za zvolené obmedzenie (vek záznamov, trieda a používateľ, ktorý zápis vytvoril) pomocou naplánovanej úlohy automatizačného servera.
Pred konfiguráciou naplánovanej úlohy typu „Premazanie záznamov z agendy Vykonané zmeny“ je ale najprv vhodné overiť, či je odstránenie záznamov vykonaných zmien vôbec vhodné riešiť, prípadne ktorých záznamov je veľa.
1. Zistenie počtu záznamov z agendy Vykonané zmeny
Na zistenie celkového počtu záznamov v agende Vykonané zmeny a zistenie, pre aké triedy je najviac záznamov, vznikla nová funkcia Analýza počtu záznamov v agende vykonané zmeny, ktorá sa spúšťa z agendy Firemné údaje na záložke Technické nástroje.
Po spustení funkcie ABRA Gen zistí približný počet záznamov a odhadne, ako dlho bude akcia trvať.
Zistenie celkového počtu záznamov je pre počet záznamov väčší ako 1 mil. náročná akcia a odporúčame ju spustiť mimo produkčného času, aby nedošlo k ovplyvneniu výkonu.
Výsledok zistenia je otvorený vo webovom prehliadači a obsahuje nasledujúce informácie:
- celkový počet záznamov
- celkový počet záznamov podľa roku vzniku záznamu
- celkový počet záznamov podľa triedy zdrojového objektu
- celkový počet záznamov podľa jednotlivých rokov a tried TOP 10
Všetky údaje sú zobrazené tak formou vizualizácie, ako aj tabuľkou so zistenými počtami, viď obrázok.
Rozhodnutie o odstránení vykonaných zmien musí vykonávať znalá obsluha. Napr. sledovanie zmien v účtovnom denníku je potrebné ponechať minimálne počas doby určenej zákonom.
Veľkosť zabraného miesta uloženými záznamami možno určiť približne vynásobením počtu záznamov * 0,5 kB.
2. Presné zistenie veľkosti dát z agendy Vykonané zmeny (tabuľka DataChangesLogs)
Zistenie na databázovom serveri:
Pre databázový server Firebird platí:
Pomocou konzolovej aplikácie gstat, ktorá je v zložke, kde je nainštalovaný Firebird.
gstat localhost:D:\<dátový súbor>.FDB -u SYSDBA -p <heslo> -t DATACHANGESLOGS
Výsledok nám zobrazí počet využívaných databázových stránok “Data pages“. Veľkosť obsadeného miesta získame vynásobením počtu * 16 kB.
Analyzing database pages ...
DATACHANGESLOGS (348)
Primary pointer page: 1204, Index root page: 1205
Pointer pages: 345, data page slots: 1125456
Data pages: 1125456, average fill: 84%
Primary pages: 96276, secondary pages: 1029180, swept pages: 0
Empty pages: 2, full pages: 1125452
Fill distribution:
0 - 19% = 5182
20 - 39% = 31025
40 - 59% = 78440
60 - 79% = 196396
80 - 99% = 814413
..
Pre databázový server MSSQL platí:
Pomocou aplikácie Management Studio - kontextová voľba na danej databáze Reports - Standard reports - Disk Usage by Top Tables.
Vo výslednom reporte vidíme priamo celkový počet záznamov a využité miesto v databázovom súbore.
Z celkového počtu záznamov a veľkosti obsadeného miesta možno odvodiť, koľko by bolo možné ušetriť miesta odmazaním určitého počtu záznamov.
Teraz, ak sa rozhodneme záznamy odstrániť, pokračujeme nastavením naplánovanej úlohy na ich premazanie.
3. Naplánovaná úloha typu Premazanie záznamov z agendy Vykonané zmeny
Pri nastavovaní triedy Business objektov a veku záznamov určených na zmazanie v parametroch úlohy je potrebné brať ohľad na povinnosť podľa platnej legislatívy uchovávať opravy niektorých typov záznamov (napr. účtovné záznamy, daňové doklady, záznamy na účely uchovávania mzdových listov a pod.).
Spustenie premazávania odporúčame nastaviť na neprodukčný čas, zvyčajne teda v nočných hodinách. Pretože záznamov môže byť toľko, že by sa ich nepodarilo odstrániť počas jednej noci (počas niekoľkých hodín), má úloha možnosť stanoviť jej maximálnu dobu trvania.
Úlohu teda nastavíme napr. na spúšťanie raz denne od 2:00 s maximálnou dobou odmazávania 180 min.
Premazávanie by malo byť nastavené tak, aby nekolidovalo s inou náročnou akciou, napr. so zálohovaním alebo uzávierkami.
Nastavíme, ako staré záznamy sa majú mazať, pre aké triedy a prípadne od ktorých používateľov.
Týmto máme úlohu nastavenú a systém nám bude pravidelne spúšťať premazávanie starých záznamov. Premazanie veľkej histórie môže podľa počtu záznamov trvať aj desiatky dní, táto akcia je náročná na všetky zdroje servera.
Na databáze MSSQL a Oracle v prípade prevádzky v režime s používaním transakčných logov je nutné počítať so zodpovedajúcim nárastom týchto logov a mať dostatok voľného miesta a zaistenie následného odzálohovania týchto logov.
Odstránenie záznamov na žiadnej z databázových platforiem nevedie k okamžitému zodpovedajúcemu zníženiu veľkosti databázy. Dôvodom je vznik fragmentácie dátových stránok odmazávaním len niektorých záznamov. Predstaviť si celý problém fragmentácie pri odoberaní záznamov z tabuliek si možno zjednodušene vysvetliť na príklade odoberania kariet pacientov z fyzickej kartotéky, keď aj napriek čiastočnému vyprázdneniu kariet pacientov zo zásuvky s pacientmi začínajúcimi na písmeno A nemožno túto zásuvku celú zrušiť, kým v nej zostávajú ešte nejaké záznamy.
Na databáze Firebird dôjde k čiastočnému zmenšeniu veľkosti databázy. Ak sa vyprázdni celá databázová stránka, môže sa trochu zmenšiť veľkosť celej databázy, ale toto zmenšenie je minimálne a tiež nezodpovedá uvoľnenému miestu podľa odstránených záznamov.
Na databáze MSSQL dôjde vďaka vzniknutej väčšej fragmentácii indexov dokonca k zväčšeniu veľkosti databázy. Treba s týmto nečakaným efektom počítať a pripraviť zodpovedajúce voľné miesto.
Na vznik väčšej fragmentácie treba upozorniť správcu databázy a dohodnúť sa, aby nedochádzalo k súbehu akcie údržby databázy (údržby indexov viď odporúčanie Údržba databázy pre Firebird a odporúčanie pre MSSQL MSSQL/Microsoft SQL Server).
4. Dosiahnutie zmenšenia zálohy databázy po odstránení záznamov
Finálne dosiahnutie zmenšenia veľkosti zálohy databázy dosiahneme vykonaním údržby databázy.
Na databáze Firebird je tento proces zaistený vykonaním zálohy a následnej obnovy zo zálohy.
Napríklad znížením počtu stránok po obnove o 253080, čo zodpovedá zmenšeniu databázy o 3,8 GB (253080 * 16kB / 1024 / 1024 = GB), pred obnovou Data pages: 1378536, average fill: 68%, po obnove Data pages: 1125456, average fill: 84%.
Na databáze MSSQL dosiahneme obdobné spustením akcie údržby indexov viď. Údržba databázy a Odporúčanie pre MSSQL MSSQL/Microsoft SQL Server.
Pre databázový server MSSQL platí:
Ak doteraz nebolo riešené spúšťanie údržby indexov, treba počítať s ďalším nárastom veľkosti databázy, a to o veľkosť jednej najväčšej tabuľky (údržba typu REBUILD potrebuje voľné miesto, aby znovu zostavila celú tabuľku). Vzniknuté zväčšenie databázy neodporúčame redukovať pomocou funkcie Shrink, pretože môže viesť k zníženiu výkonu vďaka opätovnej fragmentácii, a tiež je dobré mať rezervované miesto na prípadné opakované vykonanie akcie REBUILD najväčšej tabuľky databázy.
Je potrebné počítať s tým, že akciu typu REBUILD nie je možné spustiť v režime ONLINE na STANDARD edícii SQL servera. Spustenie tejto akcie je opäť potrebné naplánovať na čas mimo produkčnej doby, pretože môže blokovať fungovanie systému až na niekoľko hodín.
V prípade, že sa chystáte odstrániť veľké množstvo záznamov, je lepšie akciu premazávania nastaviť na kratšiu dobu behu a potom priebežne vykonávať údržbu pomocou reorganizácie indexov. Tým možno dosiahnuť nepretržitú prevádzku počas údržby.

