...
Proces D2000 DBManager ponúka niekoľko úrovní debugovania:
- Výpisy chýb
- Výpisy akcií
- Výpisy akcií trvajúcich dlhšie ako zadaný počet sekúnd
- Výpisy so zapnutou ladiacou kategóriou DBG.DBMANAGER
- Výpisy so zapnutou ladiacou kategóriou DBG.DBMANAGER.DATA
- Výpisy so zapnutou ladiacou kategóriou DBG.DBMANAGER.DBCTX
- Výpisy so zapnutou ladiacou kategóriou DBG.DBMANAGER.DBCTX.CSV
- Výpisy so zapnutou ladiacou kategóriou DBG.DBMANAGER.SQL_CONNECT
- Výpisy so zapnutým štartovacím parametrom /DBD<pocet_poziadaviek>
- Tell príkaz SHOW_HANDLE
- Tell príkaz SHOW_CONNECT
- Tell príkaz SET_WATCHDOG
- Tell príkaz SET_WATCHDOG_QUEUE
- Tell príkaz TIME_STATISTICS
- Optimalizácia a ladenie
- SV._System_DBMDbPerf"
Kotva | ||||
---|---|---|---|---|
|
...
Log informuje, že databáza TestDb má päť spojení, z toho štyri sú netransakčné, jedno transakčné a žiadne rezervované pre browser. Tri spojenia sú voľné (avail) a dve sa používajú (normal).
Zoznam všetkých možných stavov je zobrazený v tabuľke:
Kotva | ||||
---|---|---|---|---|
|
Stav | Popis |
---|---|
Init | Spojenie je v inicializačnej fáze (vytvára sa). Prechodný stav. |
Avail | Spojenie je voľné. |
Normal | Spojenie sa používa. |
Live | Spojenie prechádza zo stavu Avail do stavu Normal. Prechodný stav. |
Die | Spojenie sa zaviera. Prechodný stav. |
Zombie | Spojenie je zavreté, obslužný thread končí. Prechodný stav. |
Handles udáva počet deskriptorov, ktoré má DBManager otvorené. Môžu existovať štyri typy deskriptorov: Kotva handles handles
...
Interaktívne zisťovanie otvorených deskriptorov pomocou Tell príkazu SHOW_HANDLE. Syntax príkazu je:
...
Pokiaľ je Tell príkaz SHOW_HANDLE volaný bez parametrov, vypíšu sa informácie o všetkých otvorených deskriptoroch.
Výpis obsahuje pre každý deskriptor názov databázy, číslo spojenia, typ a názov deskriptora a informáciu, odkiaľ bol deskriptor otvorený.
Výpis typu a názvu deskriptora je pre rôzne typy deskriptorov zobrazený v tabuľke:
Typ deskriptora | Výpis typu | Názov deskriptora |
---|---|---|
deskriptor tabuľky | table | Meno objektu typu Tabuľka. |
deskriptor transakcie | trans | Meno objektu typu Databáza, na ktorej je transakcia otvorená. |
deskriptor spojenia | connect | Parameter connectString akcie SQL_CONNECT. |
deskriptor databázy | dbase | Meno objektu typu Databáza, ktorý bol parametrom dbObjIdent akcie SQL_CONNECT. |
Príklad výpisu:
CONO connection established (IPC_TCPIP)
Receiv TELL Command : SHOW_HANDLE
===================================================================
->Db TestDB con 1:table MAT_GROUP: <HI mycomp,S.Test_DBmanager>
->Db TestDB con 2:trans TestDB: <S.Test_DBmanager: 220>
===================================================================
D2000 DBManager má dva otvorené deskriptory. Prvý je na spojení č. 1, deskriptor je typu deskriptor tabuľky a otvorený je v browseri tabuľka MAT_GROUP. Deskriptor je otvorený zo schémy S.Test_DBmanager z procesu D2000 HI, ktorý beží na počítači mycomp.
Druhý deskriptor je na spojení č. 2, deskriptor je typu deskriptor transakcie a otvorený je z 220-eho riadku skriptu v schéme S.Test_DBmanager.
...
- HOBJ objektu Databáza, ktorého otvorené spojenia sa majú zobraziť
- maska názvu objektu Databáza, ktorého otvorené spojenia sa majú zobraziť
- ID - číslo spojenia alebo číslo transakcie (vrátené ako parameter handleIdent_Int akcie DB_TRANS_OPEN), ktoré sa má zobraziť
- parameter "DETAIL" spôsobí, že za výpisom spojenia bude nasledovať výpis deskriptorov (vo formáte ako pre SHOW_HANDLE) otvorených na tomto spojení
...
- pre každú databázu, vyhovujúcu vstupnému filtru, jej názov a počet otvorených spojení
- pre každé spojenie:
- názov databázy
- číslo spojenia
- stav 4554760 spojenia
- počet otvorených deskriptorov
- dobu od poslednej vykonanej operácie (alebo slovo busy a informácie o vnútornom stave spojenia, ak na spojení práve prebieha operácia. Príklad: busy (U_EXECDIRECT1/D_EXECDIRECT2))
- informáciu, či je spojenie transakčné, netransakčné alebo netransakčné rezervované pre browsery
- pre transakčné spojenie aj číslo transakcie (parameter handleIdent_Int akcie DB_TRANS_OPEN)
- pre každý deskriptor (parameter "DETAIL") výpis vo formáte SHOW_HANDLE
Príklad výpisu (spojenia v databázach začínajúcich sa na Te spolu s výpisom deskriptorov):
...
Poznámka: Pre spojenia, ktoré sú v status avail, udáva informácia o transakčnosti a číslo transakcie starý údaj (transakcia bola už ukončená). Takéto spojenie môže byť recyklované podľa potreby ako transakčné alebo netransakčné.
...
Po skončení príkazu sa vypíšu do chybového logu databázy podrobné informácie o príkaze. Príklady:
...
17:54:00.116
...
16.02
...
con
...
1:Query
...
execution
...
duration
...
00:00:01.103
...
SQL_CONNECT
...
TransactId
...
10319,
...
dbTransId
...
0,
...
Handle
...
1104492764,
...
connectString
...
{},
...
DbTableId
...
1473
...
{DB.MATERIAL},
...
Comment
...
{NS1PHUM3_HI.HIS;S.sql_TEST(
...
9473)
...
10864;BT_connect_OnClick:
...
248
...
}
...
17:54:18.926
...
16.02
...
con
...
1:Query
...
execution
...
duration
...
00:00:01.105
...
SQL_PREPARE
...
TransactId
...
10320,
...
dbTransId-1,
...
Handle
...
10319,
...
Statment
...
{SELECT
...
ID_MATERIAL
...
FROM
...
material
...
},
...
bBindIn
...
FALSE,
...
FetchSize
...
1,
...
colNr
...
17,
...
Comment
...
{NS1PHUM3_HI.HIS;S.sql_TEST(
...
9473)
...
10864;BT_prepare_OnClick:
...
279
...
}
...
17:55:59.113
...
16.02
...
con
...
2:Query
...
execution
...
duration
...
00:00:01.110
...
DB_TRANS_OPEN
...
TransactId
...
10325,
...
Comment
...
{NS1PHUM3_HI.HIS;S.sql_TEST(
...
9473)
...
10864;BT_db_trans_open_OnClick:
...
543
...
}
...
Význam jednotlivých polí:
...
- maska názvu objektu Databáza, ktorého spojenia sa majú monitorovať
- minimálna dĺžka trvania databázových akcií, ktorá sa má sledovať.
Hodnota 0 vypína sledovanie doby vykonávania databázových akcií.
Rozdiel medzi SET_WATCHDOG a SET_WATCHDOG_QUEUE je tento:
príkaz SET_WATCHDOG sleduje operácie, ktorých vykonávanie v databáze trvalo dlhšie ako špecifikovaný čas. Pokiaľ ale viacero klientov zdieľa to isté automatické (netransakčné) spojenie, z pohľadu klienta môže databázová akcia trvať dlho kvôli tomu, že čaká vo fronte, v ktorej je pred ňou ešte jedna alebo viacero databázových akcií od iných klientov. Z toho dôvodu bol implementovaný príkaz SET_WATCHDOG_QUEUE, ktorý monitoruje celkový čas vybavenia databázovej akcie od vloženia do príslušnej fronty až po ukončenie.
...
Význam jednotlivých polí: viď popis v rámci sekcie SET_WATCHDOG.
Kotva | ||||
---|---|---|---|---|
|
...
Parametre databázy je možné nastavovať aj v procese D2000 CNF. Spojenie vytvorené akciou SQL_CONNECT obsahuje v konektovacom stringu nasledovné parametre:
Názov parametra v CNF | Názov parametra v konektovacom stringu |
---|---|
Predpripravené spojenia | PRE=... |
Maximum spojení | MAX=... |
Maximum automatických spojení | NTC=... |
Rezervovaných browser spojení | BRC=... |
Zatvor nepoužívané spojenia po (sek) | CLOSE=... |
Ukonči DBManager po timeoute (min) | WDC=... |
Debug | DEBUG |
Off | OFF |
Maximum vrátených riadkov | MR=... |
Prázdne operácie po dobe nečinnosti | EO=... |
Príklad nastavenia doplnkových parametrov databázy v jej konektovacom stringu:
DEBUG;PRE=10;MAX=120;CLOSE=300;NTC=20;WDC=7;MR=1000
Databáza bude mať zapnuté vypisovanie debugovacích informácií do súboru DBManager.log, po štarte procesu D2000 DBManagera sa vytvorí 10 spojení na databázu, maximálny počet spojení je 120, čas zatvorenia nepoužívaného spojenia je 300 sekúnd a maximálny počet automatických spojení je 20, vnútorný watchdog ukončí proces D2000 DBManager, ak je niektoré spojenie na databázu nefunkčné (zamrznuté) viac ako 7 minút.
- Z dôvodov optimalizácii rýchlosti a vzájomného neblokovania sa klientov vytvára proces D2000 DBManager viac ako jedno automatické spojenie na databázu. Automatické spojenia môžu byť vytvárané ihneď po štarte procesu D2000 DBManager, takže sú už predpripravené na použitie (keďže napr. u databázy Oracle môže trvať vytvorenie spojenia aj 1 sekundu alebo dlhšie, čo sa prejaví oneskorením v skriptoch ESL). Počet predpripravených spojení je možné nastaviť pomocou procesu D2000 CNF na objekte typu Databáza pomocou parametra PRE (Preconnects). Maximálny počet spojení je možné obmedziť parametrom MAX (Max connects), pričom hodnota 0 obmedzenie vypína. Ak proces D2000 DBManager spotrebuje všetky spojenia, tak ďalšie volania snažiace sa o vytvorenie spojenia (DB_TRANS_OPEN) vrátia chybu DBM_MAX_CONNECTIONS.
- Pomocou parametra NTC je možné nastaviť maximálny počet spojení automaticky vytvorených. Pokiaľ parameter NTC nie je zadaný, tak:
- na automatické spojenia sa použije najviac 1/4 z Max connects
- ak je Max<4, vytvorí sa 1 automatické spojenie
- ak je Max=0, vytvorí sa najviac 5 automatických spojení (prednastavená hodnota)
Ak už proces D2000 DBManager dosiahol maximálny zadaný počet automatických spojení, po ďalšej požiadavke (napr. netransakčný SQL_CONNECT, PG_CONNECT alebo DB_CONNECT) sa nevytvorí nové spojenie, ale použije sa jedno z existujúcich. Parameter NTC má význam ani nie tak pre proces D2000 DBManager, ako pre databázu, ku ktorej sa pripája, aby nevyčerpal limit spojení, ktoré má databáza nastavené. - Z dôvodu ďalšieho zrýchlenia práce, proces D2000 DBManager
recykluje existujúce spojenia. Ak bolo spojenie uzavreté (napr. DB_TRANS_CLOSE) alebo nie je používané (vzniklo ako dôsledok SQL_CONNECT a prebehlo SQL_DISCONNECT), tak je označené ako voľné. Voľné spojenia môžu byť opätovne využité, čo ušetrí čas pripájania sa k databáze a urýchli prácu skriptov. Voľné spojenia, ktoré nepatria medzi predpripravené a nie sú použité, budú ukončené po uplynutí času, ktorý je daný v parametri Close v sekundách(predpripravené spojenia sa neukončujú). Nastavením tohto parametra na zápornú hodnotu je možné prikázať procesu D2000 DBManager, aby voľné spojenia neukončoval - v takomto prípade bude ich množstvo iba stúpať a bude odzrkadľovať stav počas maximálnej záťaže procesu D2000 DBManager.Kotva recyklacia recyklacia
Kvôli zrýchleniu operácií v prístroji browser je od verzie D2000 8.00.009 možné vyhradiť pre tieto operácie (otváranie browsera, prechod medzi stránkami a akcia DB_REFRESH_TABLE) spojenia pomocou parametra BRC - Rezervované browser spojenia.Kotva brc brc
Výhodou je, že na týchto vyhradených spojeniach nebudú vykonávané iné netransakčné operácie (ktoré môžu trvať niekoľko sekúnd a viac) a akcia DB_REFRESH_TABLE ako aj prechod medzi stránkami bude rýchlejší, ako keď sú browser operácie vykonávané na automatických spojeniach.
Poznámka: Ak je hodnota parametra BRC - Rezervované browser spojenia rovná nule, browser operácie sú vykonávané na automatických spojeniach, ako to bolo pred implementáciou tohto parametra.
Ladiace a informačné výpisy: Proces D2000 DBManager umožňuje zobraziť niekoľko úrovní ladiacich výpisov, ktoré sú popísané v samostatnom dokumente.Kotva logovaci_subor logovaci_subor - Ukončovanie procesu D2000 DBManager v dôsledku "zamrznutia" niektorého spojenia: D2000 DBManager obsahuje vnútorný watchdog, ktorý každú minútu zisťuje, či niektoré spojenie na databázu nie je "zamrznuté" (t.j. obslužný thread sa nevrátil z volania ODBC rozhrania). V takomto prípade zapíše informáciu do logovacieho súboru. Ak watchdog zistí takúto situáciu n-krát po sebe (pričom n je nastaviteľné parametrom WDT), ukončí proces D2000 DBManager. Prednastavené hodnota WDT=0 znamená, že proces D2000 DBManager sa neukončuje.
- Nastavovanie parametrov pre spojenia vytvárané pomocou príkazu SQL_CONNECT s použitím tzv. konektovacieho stringu: keďže tieto spojenia sa neviažu na objekt typu Databáza, ale priamo sa odvolávajú v konektovacom stringu na DSN, nastavenie parametrov Debug a Connect timeout je možné realizovať priamo v konektovacom stringu.
Príklad: "UID=meno užívateľa;PWD=heslo užívateľa;DSN=meno DSN;ACD;Debug;CLOSE=300"
Vytvorené spojenie bude mať zapnuté vypisovanie ladiacich informácií a nepoužívané spojenie sa zavrie po 300 sekundách. Voľné spojenie je možné znovu použiť iba vtedy, ak má rovnaký konektovací string ako vytvárané spojenie.
Ladiace a informačné výpisy týchto spojení, ktoré sú "nezávislé" (independent) na objektoch typu Databáza, vyzerajú nasledovne:
08:59:45.710 Indep# 3 DSN=TestX:SQL_FETCH BEG
08:59:45.710 Indep# 3 DSN=TestX:SQL_FETCH END
log informuje, že "nezávislé" spojenie č. 3, ktorého DSN je "TestX", vykonalo akciu SQL_FETCH.
Ak aspoň jedno existujúce nezávislé spojenie má zapnuté vypisovanie ladiacich informácií prostredníctvom parametra Debug v konektovacom stringu, tak pri periodickom vypisovaní sa v logu objavia aj informácie o nezávislých spojeniach:
09:14:27.752 Db Independent connects WD: 1 (1/0/0) cons:normal- 1,
log informuje o tom, že existuje jediné nezávislé spojenie a to je používané.
Čísla v zátvorkách udávajú počty netransakčných, transakčných a browser spojení.
...