Nastavenie počtu transakcií pre niektoré operácie

ABRA Gen je SQL databázový systém pracujúci na princípe tzv. transakcií. Detaily viď v kap. Technológia spracovania dát. V tejto kap. bolo o. i. povedané, že v SQL databázach sa obvykle nepodporujú dlhotrvajúce transakcie Preto v niektorých častiach systému, v ktorých sa predpokladá, že vykonanie požadovanej operácie by mohlo znamenať dlhotrvajúcu transakciu, je kvôli optimalizácii možné užívateľsky zvoliť, v akom počte transakcií sa požadovaná operácia vykoná. Typicky ide o funkcie, ktoré dokážu pracovať s označenými záznamami (teda nielen s jedným aktuálnym). Ide napr. o funkcie:

S väčším počtom transakcií sa pracuje tiež pri ukladaní jázd v agende Kniha jázd.

Tému objasníme na funkcii Hromadnej opravy:

Po vyvolaní funkcie Hromadnej opravy v agende, ktorá túto funkciu obsahuje, sa ponúkne dialógové okno, v ktorom sa môžu nastavovať ďalšie údaje na vykonanie funkcie (napr. položky, ktoré sa majú hromadne opraviť na zadanú hodnotu). Ve spodní části okna je ve většině případů k dispozici funkční tlačítko Detail >>, po jehož stisku můžete nastavit, v jakém počtu transakcí se má funkce provést:

Ponúkané voľby

Rozdiel medzi jednotlivými voľbami môžeme posudzovať z dvoch hľadísk:

  • rýchlosť spracovania - rozdiel je pri menšom počte označených záznamov zanedbateľný, prejaví sa pri veľkom množstve spracovávaných záznamov (rádovo tisíckach). Všeobecne je možné konštatovať približne nasledujúce: menší počet označených záznamov sa spracuje rýchlejšie v jednej transakcii, veľký počet označených záznamov sa naopak rýchlejšie spracuje väčším počtom transakcií. Slovo "približne" je použité zámerne, pretože rozdiel sa prejaví skutočne až pri veľkom počte označených.
  • reakcia na chyby - pri spracovaní záznamu môže dôjsť k tzv. kolízii. Napr. počas hromadnej opravy sa systém pokúša uložiť niektorý z opravovaných záznamov, pritom ale zistí, že ho medzitým opravil iný užívateľ v sieti. V tom momente dôjde k tzv. "kolízii pri uložení" a takýto záznam nebude možné uložiť. Alebo môže dôjsť k tomu, že záznam nie je možné opraviť z nejakého iného dôvodu (boli s ním už uskutočnené také zásahy alebo je v takom stave, že opravy nie sú povolené). Z hľadiska uskutočňovanej transakcie to znamená, že celú zahájenú transakciu opravy a uloženia označených záznamov nie je možné ukončiť (potvrdiť) a systém sa "vráti" do stavu pred zahájením transakcie (čo užívateľsky znamená, že požadovaná hromadná oprava sa nevykonala).

    Z toho vyplýva rozdiel medzi jednotlivými voľbami: Ak zvolíte napr. akciu hromadnej opravy všetkých označených záznamov v jednej transakcii a pri jednom z nich dôjde ku kolízii, zruší sa celá akcia s tým, že neprebehla oprava žiadneho záznamu, čím môžete zbytočne stratiť čas (funkciu budete musieť po vyriešení kolízie spustiť znovu pre všetky označené záznamy). A naopak, ak sa pre každý záznam zaháji samostatná transakcia, tak ak pri niektorom z nich nie je kvôli kolízii potvrdená, neprídete tým o opravy vykonané už v ostatných transakciách (po vyriešení kolízie budete musieť funkciu spustiť znovu liba pre nespracované záznamy.)

    Optimálnu voľbu z oboch hľadísk tak môže predstavovať možnosť spracovania označených záznamov po blokoch, napr. každých 1000 záznamov v samostatnej transakcii (samozrejme ak je táto voľba v danom mieste k dispozícii).

Ak máte zvolené "Všetko v jednej transakcii" a máte označených viac ako 1000 záznamov, systém vás ešte pred zahájením transakcie upozorní na možnosť nastavenia počtu transakcií.

Z vyššie uvedeného vyplýva, že pri menších počtoch označených záznamov sa užívateľ voľbou počtu transakcií vôbec nemusí zdržiavať (rozdiely sú aj tak zanedbateľné) a môže ponechať defaultnú voľbu, ktorá je v danom mieste programu prednastavená. A touto možnosťou sa bude zaoberať až vtedy, keď ho na ňu systém upozorní.

Ak pri ukladaní záznamov dôjde pri niektorom z nich k nemožnosti opravy, systém túto skutočnosť nahlási, pričom špecifikuje aj dôvod tejto kolízie. Viď napr. reakcie na chyby v prípade funkcií Hromadných opráv. Pritom ak je nastavené vykonanie operácie vo viac ako jednej transakcii, a niektorá z nich nie je potvrdená, systém hromadnú opravu neukončí, tzn. pokračuje spracovaním ďalších záznamov v ďalších transakciách.

Či spracovávané záznamy zostanú označené (bez ohľadu na to, či u nich k zmene nakoniec došlo alebo nie) alebo nie, závisí od daného miesta programu.

Ak teda došlo k nejakej kolízii, môžete odstrániť príčinu kolízie a akciu Hromadnej opravy spustiť znovu. Buď  pre všetky označené záznamy (použijete hlavne, ak ste opravu vykonávali v jednej transakcii a neopravilo sa nič), alebo pre nespracované záznamy (spoznáte ich tak, že spracované (zmenené) sú zvýraznené tučným písmom).

Ak vykonáte Občerstvenie zoznamu, čo je najčastejší spôsob, ako riešiť nemožnosť opravy záznamu z dôvodu kolízie s iným užívateľom, tak "sa zabudne" ako stav označenia, tak aj informácia o tom, ktorý záznam bol zmenený. Ak nechcete nespracované záznamy označovať znovu, môžete príslušný problémový záznam napr. na chvíľu odznačiť, pre ostatné označené spustiť príslušnú Hromadnú opravu znovu a až potom použiť Občerstvenie. Problémový záznam je tiež možné opraviť ručne funkciou F4=Oprava - pri vyvolaní opravy prebehne občerstvenie daného záznamu (nemusíte teda občerstvovať celý zoznam).

Pri funkcii Hromadná kópia odporúčame uskutočňovať operáciu skôr v jednotlivých transakciách. A to kvôli tomu, že pri vytváraní nových dokladov podľa zdrojového prebieha množstvo validácií, pri ktorých je väčšia pravdepodobnosť, že by nemuseli byť splnené. (Napr. pri poslednej kópii by došlo k tomu, že daný tovar už nie je na sklade a nie je ho možné vyskladniť a pod. Ak by všetko prebiehalo v jednej transakcii, neuložila by sa ani jedna z generovaných kópií).