Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
No mám to rozdělené na cykly, pokud jeden uzel projde, druhý neprojde, při příštím spojení to projde…
William 11.05.2007 11:38
William
V prvnim cyklu jsou 2 tranakce za sebou, pokud mi neunikly nejake BEGIN-END Pokud se prvni provede a… nový
Jan Fiala 11.05.2007 11:45
Jan Fiala
Chtěl jsem to udělat pokud možno tak aby se provádělo co nejmíň operací v jedné transakci, aby při p… nový
William 11.05.2007 11:47
William
No je to něco jako asi takto, to co jsem vypsal je jen část : Pokud 1.transakce proběhne úspěšně, pr… nový
William 11.05.2007 11:57
William
Osobně bych to řešil takto: V cyklu (nebo bez něj) bych si vše zpracoval do pomocnych tabulek bez tr… nový
Jan Fiala 11.05.2007 12:28
Jan Fiala
To by se dalo jenomže já potřebuju ještě než data vložím do tabulky rozhodnout o tom jestli ty data… nový
William 11.05.2007 13:54
William
Tak nakonec jsem to částečně zafixoval. Jednak jsem zvýšil lock_timeout a všiml jsem si že nemám nai… poslední
William 12.05.2007 00:01
William

No mám to rozdělené na cykly, pokud jeden uzel projde, druhý neprojde, při příštím spojení to projde co se provedlo a co ne. Takže pokud první transakce při zápisu do tabulky 1,2 projde a spadne to u druhé transakce, nevadí to. Dřív jsem to měl jako že ve velké transakci, takže tyto dvě byli vnořené. Ale to my přišlo že to není asi moc dobré.

Chtěl jsem to udělat pokud možno tak aby se provádělo co nejmíň operací v jedné transakci, aby při případné chybě trval rollback co nejkratší dobu.
Je pravda že cursor je dost pomalý ale zatím jsem nepřišel na jeho náhradu.
Dejme tomu že cursor prochází tabulku ve které je zhruba tak 100 záznamů.
Stejně mi nejde narozum, proč se to uzamkne na tak dlouhou dobu jakou je třeba 5 minut.
Možná tam mám něco špatně zapsané.
V jednu chvíli pracuje nad stejnýma tabulkama tak maximálně deset uživatelů.

No je to něco jako asi takto, to co jsem vypsal je jen část :
Pokud 1.transakce proběhne úspěšně, provádí se 2.transakce, pokud druhá uspěje provádí se 3.transakce.
Pokud 1.transakce proběhne úspěšně, provádí se 2.transakce, pokud druhá neuspěje, dojde k rollbacku 2.transakce, první zůstavá vyřízená, 3.transakce se už neprovede.

Osobně bych to řešil takto:
V cyklu (nebo bez něj) bych si vše zpracoval do pomocnych tabulek bez transakce.
Jakmile bych měl připravena data pri insert, zahájím transakci, nasypu najednou pomoi INSERT INTO - SELECT ... data z pomocnych tabulek do ostrych a transakci ukončím. Pokud jde o stovky záznamů, musí to být hotové během chviličky.

To by se dalo jenomže já potřebuju ještě než data vložím do tabulky rozhodnout o tom jestli ty data do tabulky můžu uložit, jedná se o skladové zásoby, tzn. kontroluju jestli množství nepřesahuje dovolenou mez, pak taky kontroluju nedělitelné množství. Takže to je problém. A že bych počítal kolik množství daného zboží obsahuje dávka a pak to kontroloval oproti dané mezi, to asi taky není dobré. A navíc dávka neobsahuje jenom příkaz insert, ale taky update a delete.

Tak nakonec jsem to částečně zafixoval. Jednak jsem zvýšil lock_timeout a všiml jsem si že nemám naindexovanou jednu tabulku ze které čtu a ve které je nějakých 40000 řádků. Takže po těchto dvou úpravách když už dojde k hlášce lock request out of period, zámek se během sekundy uvolní.

Zpět do poradny Odpovědět na původní otázku Nahoru