Nastavení počtu transakcí pro některé operace

ABRA Gen je SQL databázový systém pracující na principu tzv. transakcí. Detailněji viz kap. Technologie zpracování dat. V této kap. bylo mj. řečeno, že v SQL databázích není podpora dlouhotrvajících transakcí obvyklá. Proto v některých částech systému, kde se předpokládá, že by provedení požadovaných operací mohlo znamenat dlouho trvající transakci, je z důvodu optimalizace možno uživatelsky zvolit, v jakém počtu transakcí se požadovaná operace provede. Typicky se jedná o funkce, které umí pracovat s označenými záznamy (tedy nejen s jedním aktuálním). Jedná se např. o funkce:

S větším počtem transakcí se pracuje rovněž při ukládání jízd v agendě Kniha jízd.

Téma objasníme na funkci Hromadné opravy:

Po vyvolání funkce Hromadné opravy v agendě, která tuto funkci obsahuje, se nabídne dialogové okno, kde se mohou nastavovat další údaje pro provedení funkce (např. položky, které se mají hromadně opravit na zadanou 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:

Nabízené volby

Rozdíl mezi jednotlivými volbami můžeme posuzovat ze dvou hledisek:

  • rychlost zpracování - rozdíl u menšího počtu označených záznamů je zanedbatelný, projeví se u velkého množství zpracovávaných záznamů (řádově tisíce). Obecně lze konstatovat přibližně následující: menší počet označených záznamů bude zpracován rychleji v jedné transakci, naopak velký počet označených záznamů bude zpracován rychleji ve větším počtu transakcí. Slovo "přibližně" je použito záměrně, jelikož se rozdíl projeví opravdu až při velkém počtu označených.
  • reakce na chyby - při zpracování záznamu může dojít k tzv. kolizi. Např. v průběhu hromadné opravy se systém pokouší uložit některý z opravovaných záznamů, přitom ale zjistí, že jej mezitím opravil jiný uživatel v síti. V ten moment dojde k tzv. "kolizi při uložení" a takový záznam není možné uložit. Nebo může dojít k tomu, že záznam nelze opravit z nějakého jiného důvodu (byly s ním již provedeny takové zásahy nebo je v takovém stavu, že opravy nejsou povoleny). Z hlediska prováděné transakce to znamená, že celou zahájenou transakci opravy a uložení označených záznamů není možno ukončit (potvrdit) a systém se "vrátí" do stavu před zahájením transakce (což uživatelsky znamená, že požadovaná hromadná oprava nebyla provedena).

    Z toho vyplývá rozdíl jednotlivých voleb: Pokud zvolíte např. akci hromadné opravy všech označených záznamů v jedné transakci a u jednoho z nich dojde ke kolizi, pak se celá akce zruší s tím, že nebyla provedena oprava u žádného záznamu, čímž můžete ztratit zbytečně čas (funkci budete muset po vyřešení kolize spustit znovu pro všechny označené záznamy). A naopak, pokud se na každý záznam zahájí samostatná transakce, pak není-li u jednoho záznamu z důvodu kolize potvrzena, nepřijdete tím o opravy již provedené v ostatních transakcích (funkci budete muset po vyřešení kolize spustit znovu jen pro nezpracované záznamy.)

    Optimální volbou z obou hledisek pak může být možnost zpracování označených záznamů po blocích, např. každých 1000 záznamů v samostatné transakci (pokud je ovšem tato volba v daném místě k dispozici).

Pokud máte zvoleno "Vše v jedné transakci" a máte označeno více než 1000 záznamů, systém vás ještě před zahájením transakce upozorní na možnost nastavení počtu transakcí.

Z výše uvedeného plyne, že pro menší počty označených záznamů se uživatel volbou počtu transakcí vůbec nemusí zdržovat (rozdíly jsou stejně zanedbatelné) a může ponechat defaultní volbu, která je v daném místě programu přednastavena. A bude se touto možností zabývat teprve tehdy, bude-li na ni systémem upozorněn.

Pokud při provádění ukládání záznamů dojde u některého z nich k nemožnosti opravy, systém tuto skutečnost nahlásí, přičemž i specifikuje důvod této kolize. Viz např. reakce na chyby v případě funkcí Hromadných oprav. Přitom pokud je nastaveno provedení operace ve více transakcích než jedné, a některá z nich není potvrzena, systém provádění hromadné opravy neukončí, tedy pokračuje zpracováním dalších záznamů v dalších transakcích.

Zda zpracovávané záznamy zůstanou označené (bez ohledu na to, zda u nich změna byla či nebyla nakonec provedena) či nikoli, závisí na daném místě programu.

Pokud tedy došlo k nějaké kolizi, můžete odstranit příčinu kolize a akci Hromadné opravy spustit znovu. Buď pro všechny označené záznamy (použijete hlavně, pokud jste opravu prováděli v jedné transakci a neopravilo se nic), nebo pro nezpracované záznamy (poznáte je tak, že zpracované (změněné) jsou zvýrazněny tučně).

Pokud provedete Občerstvení seznamu, což je nejčastější způsob, jak řešit nemožnost opravy záznamu z důvodu kolize s jiným uživatelem, je "zapomenut" jak stav označení, tak i informace o tom, který záznam byl změněn. Pokud nechcete nezpracované záznamy označovat znovu, můžete např. příslušný problémový záznam na chvíli odznačit, pro zbývající označené spustit znovu příslušnou Hromadnou opravu a teprve poté provést Občerstvení. Lze též problémový záznam opravit ručně funkcí F4=Oprava - při vyvolání opravy se provede občerstvení daného záznamu (nemusíte tedy občerstvovat celý seznam).

U funkce Hromadná kopie spíše doporučujeme provádět operaci v jednotlivých transakcích. Důvodem je to, že při vytváření nových dokladů podle zdrojového se provádí velká řada validací, u nichž je větší pravděpodobnost, že by nemusely být splněny. (Např. u poslední kopie by došlo k tomu, že dané zboží již není skladem a nelze je vyskladnit apod. Pokud by vše probíhalo v jedné transakci, neuložila by se ani jedna z generovaných kopií).