21.8.2024

Diagnostika a ladenie databázových operácií v D2000

Diagnostika a ladenie databázových operácií v D2000

Proces DbManager slúži v systéme D2000 na prácu s aplikačnými databázami. Čím viac je konkrétna aplikácia vzdialená od klasického SCADA systému a čím viac MES funkcionality obsahuje, prípadne čím má viac väzieb na externé systémy (ERP, účtovníctvo, mzdy, dochádzkový systém, údržba a iné), tým dôležitejšiu úloha zohrávajú aplikačné databázy. Úplným extrémom sú systémy ETRM (Energy Trading & Risk Management), kde v podstate neexistujú žiadne štandardné SCADA objekty (priemyselné komunikácie s meranými bodmi, stanicami a linkami, prípadne schémy ich zobrazujúce), ale celá aplikácia je databázovo orientovaná a postavená na procesoch D2000 DbManager (práca s databázou) a D2000 Event Handler (skripty). V tomto článku si povieme niečo o diagnostike DbManagera.

História

V roku 2003, keď som nastúpil do Ipesoftu, po pár mesiacoch som dostal za úlohu prerobiť proces DbManager  z jednothreadovej na multithreadovú aplikáciu. V tom čase bol vnímaný ako „úzke hrdlo“, ktoré brzdilo existujúcich užívateľov ETRM systémov. Po prerábke nasledovalo obdobie rozvoja ETRM systémov (v dôsledku liberalizácie trhu s elektrickou energiou na Slovensku) a teda intenzívneho nasadzovania optimalizovaného DbManagera. Bolo nutné doň zapracovať viaceré diagnostické možnosti a podporu pre ladenie, aby sme dokázali odhaliť a opraviť nielen chyby v samotnom DbManageri, ale aj chyby v aplikáciách, v ktorých je používaný – a výkonnostné problémy.

Ladiace možnosti

O možnostiach ladenia vznikol celý dokument DBManager - Ladenie a debugovanie, ktorý sa nachádza v našej dokumentácii. Niekoľko príkladov, čo všetko je možné:

Zapnutie logovania – na jednotlivých objektoch typu Databáza je možné zapnúť voľbu Debug a špecifikovať veľkosť logovacieho súboru databázy. Do tohto súboru sa zapisujú akcie vykonávané všetkými taskami, ktoré obsluhujú jednotlivé spojenia na databázu. Pomocou ladiacich kategórií DBG.DBMANAGER resp. DBG.DBMANAGER.DATA je možné zapnúť logovanie jednotlivých SQL príkazov a logovanie zapisovaných/načítaných dát. Pri zapnutom logovaní zároveň DbManger každú minútu vypisuje počty spojení a databázových handlov (viď predchádzajúci blog o procese DbManager).

Obrázok 1 - Logovací súbor databázy DB_My_Test

Chybové logy – ak pri vykonaní databázovej akcie dôjde ku chybe, tak detaily chyby sú zalogované do chybového logu databázy (<nazov_databazy>_ERR.log).

Obrázok 2 - Chybový log databázy DB_My_Test. Chyba obsahuje aj údaje o skripte a riadku, na ktorom nastala.

Výpis informácií o databázach a spojeniach – pomocou tell príkazu SHOW_CONNECT je možné pre konkrétnu DB (alebo viaceré/všetky podľa masky mena) zistiť informácie, koľko majú vytvorených spojení a deskriptorov (handle) a v akom stave sú jednotlivé spojenia. Tieto výpisy umožňujú odhaliť dlho bežiace operácie, prípadne „zabudnuté“ a necommitované transakcie ako aj blokované spojenia (v dôsledku necommitovaných transakcií).

Obrázok 3 - Výpis zoznamu spojení, ich stavu a deskriptorov v D2000 SysConsole

Výpis informácií o deskriptoroch pre databázy/tabuľky – pomocou tell príkazu SHOW_HANDLE je možné pre konkrétnu DB alebo tabuľku (alebo viaceré/všetky podľa masky mena tabuľky) zistiť informácie o otvorených deskriptoroch. Tieto výpisy pomáhajú pri upresnení detailov (napr. aké operácie sa vykonali v rámci transakcie, kým došlo k jej zablokovaniu alebo „zabudnutiu“ v dôsledku pádu vykonávaného ESL skriptu).

Obrázok 4 -  Výpis zoznamu deskriptorov a odkiaľ boli otvorené

Sledovanie dlhých operácií – tell príkazom SET_WATCHDOG <database_mask> <seconds> resp. SET_WATCHDOG_QUEUE <database_mask> <seconds> je možné zapnúť sledovanie databázových akcií, ktorých trvanie (resp. trvanie včítanie čakania vo frontách procesu DbManager) trvalo dlhšie ako špecifikovaný počet sekúnd. Druhý z príkazov je užitočný najmä ak sa nepoužívajú transakcie ale tzv. automatické spojenia (commit nasleduje po každej databázovej akcii). Automatické spojenia su zdieľané medzi skriptami/užívateľmi, takže pokiaľ niektorá akcia trva dlhšie, môže spôsobiť čakanie inej databázovej akcie, ktorá využíva to isté spojenie na databázu.

Obrázok 5 - Informácia o operáciách trvajúcich viac ako 4 resp. 3 sekundy pre spojenia ‚con 3‘ a ‚con 5‘ databázy DAEDB

Sledovanie front taskov – keď už spomíname fronty, tak štartovacím parametrom /DBD<pocet_poziadaviek> je možné zapnúť výpisy, ak počet požiadaviek vo fronte niektorého z automatických (netransakčných) spojení prekročí nakonfigurovanú medzu.

Výpis časových štatistík databáz/tabuliek – od spustenia zberá proces DbManager štatistiky o trvaní a počte jednotlivých druhov databázových akcií a tell príkazom TIME_STATISTICS <database_mask> [DETAIL] je možné ich vypísať. Pre každú databázu (resp. pre každú tabuľku, ak bol špecifikovaný parameter DETAIL) sa vypíšu počty a celkové časy jednotlivých databázových akcií, trvanie najdlhšej akcie a informácia o skripte, ktorý akciu volal. Nasledujúci obrázok ukazuje informácie o operáciách BROWSER_OPEN (otvorenie tabuľky v zobrazovači Browser), BROWSER_CONTROL (stránkovanie v browseri a editácia) a o akciách DB_INSERT/DBS_INSERT.

Obrázok 6 - Časť výpisu príkazu TIME_STATISTICS

Priebežný zber informácií o spojeniach – systémová štruktúrovaná premenná SV._System_DBMDbPerf umožňuje priebežne (s periódou 10 sekúnd) monitorovať počty jednotlivých typov spojení (transakčne, netransakčné, browser) a počty požiadaviek vo frontách taskov obsluhujúcich tieto typy spojení.

Obrázok 7 - Monitorovanie počtu spojení pre proces [1]_SELF.DBM a databázu DB.Hivus.SysCfg

Novinky v aktuálnej verzii

Napriek rozsiahlym ladiacim možnostiam procesu DbManager neboli naši užívatelia stále spokojní. Chceli niečo jednoduchšie a užívateľsky prívetivejšie ako ladenie pomocou tell príkazov. Preto sme im vyšli v ústrety a v D2000 verzii 23 je k dispozícii DbManager Diagnostic Pack (dostupný v menu nástrojov D2000 Cnf a D2000 GrEditor). Podľa vzoru obľúbeného ESL Diagnostic Pack-u na viacerých záložkách zobrazuje rôzne typy objektov a informácií o nich, ktoré boli doteraz dostupné iba cez tell príkazy. Umožňuje aj filtrovanie a triedenie podľa jednolivých stĺpcov a kopírovanie informácií (v CSV formáte) do schránky. Takže – čo všetko ponúka?

• Záložka Processes – informácie o procesoch DbManager (*.DBM) - kde bežia, akú majú spotrebu pamäte a či sú aktívna alebo pasívna inštancia. Kontextové menu umožňuje okrem kopírovania aj načítanie štatistík vybraného procesu o všetkých jeho databázach (do záložky Database Statistics) a tabuľkách (do záložky Table Statistics). Tieto štatistiky (zbierané od štartu procesu DbManager) je možné aj resetovať.

Obrázok 8 - Zoznam DBM procesov

• Záložka Databases – informácie o objektoch Database – koľko majú spojení v jednotlivých stavoch, celkové trvanie a počty databázových operácií a informácie o najdlhšej databázovej operácii. Kontextové menu umožňuje čítanie štatistík o vybranej databáze (do záložky Database Statistics) a o tabuľkách patriacej do tejto databázy (do záložky Table Statistics). Tieto štatistiky (zberané od štartu procesu) je možné aj resetovať.

Obrázok 9 - Zoznam databáz

• Záložka Connects – informácie o spojeniach na databázu – v akom sú stave (busy/idle) a ako dlho, akého sú typu (transakčne, netransakčné, browser) a koľko deskriptorov majú otvorené.

Obrázok 10 - Zoznam databázových spojení

• Záložka Handles – informácie o otvorených deskriptoroch – akého sú typu, prípadne ku ktorému objektu Databáza/Tabuľka sa viažu a informácie o skripte, ktorý deskriptor vytvoril.

Obrázok 11 - Zoznam deskriptorov

• Záložka Database Statistics – štatistiky jednotlivých databáz. Pre každú databázu a typ databázovej akcie je tu informácia o počte vykonaní, o ich celkovom a maximálnom trvaní a informácia o skripte, ktorý najdlhšiu akciu inicioval.

Obrázok 12 - Databázové štatistiky

• Záložka Table Statistics – štatistiky jednotlivých tabuliek. Pre každú tabuľku a typ databázovej akcie je tu informácia o počte vykonaní, o celkovom a maximálnom trvaní a informácia o skripte, ktorý najdlhšiu akciu inicioval. Kontextové menu umožňuje čítanie alebo resetovanie štatistík o vybranej tabuľke.

Obrázok 13 - Tabuľkové štatistiky

Podobne ako v ESL Diagnostic Pack-u, aj tu existuje tlačidlo Refresh, ktoré načíta aktuálne informácie z procesu/procesov DbManager.

Jedna zaujímavosť - DbManager Diagnostic Pack je možné spustiť nielen z hlavného menu, ale aj z kontextového menu Rozšírené akcie na objektoch typu Databáza a Tabuľka. V tomto prípade sa zobrazia iba informácie o konkrétnej Databáze, jej rodičovskom procese DbManager a o tabuľkách, ktorých rodičom je vybraná Databáza.

DbManager Diagnostic Pack je čerstvou novinkou v systéme D2000 a verím, že poteší všetkých užívateľov, ktorí s databázami v D2000 pracujú. Aby sme vyšli v ústrety kolegom, OEM partnerom aj zákazníkov, bol DbManager Diagnostic Pack spätne podporený v týchto existujúcich releasoch, pre ktoré boli vygenerované nové procesy DbManger a Cnf:

·       D2000 V21 release 73

·       D2000 V22 release 76

·       D2000 V23 release 78

Záver

Proces D2000 DbManager, slúžiaci na vykonávanie databázových akcií v rámci aplikačného servera reálneho času Ipesoft D2000, ponúka rozsiahle možnosti ladenia, diagnostiky a optimalizovania výkonu pri práci s databázami. Nedávno vyvinutý DbManager Diagnostic Pack implementuje užívateľsky prívetivé rozhranie dostupné priamo z nástrojov D2000 Cnf a D2000 GrEdit a zrýchľuje ladenie a hľadanie výkonnostných problémov v aplikáciách postavených na technológii Ipesoft D2000.

6.5.2024, Ing. Peter Humaj, www.ipesoft.com

Iné blogy