Popis chyby:
Vznik tzv. deadlocků (to je ta chyba SQL:1205 Data jsou dočasně uzamčena jiným uživatelem. Akci opakujte) je vlastnost technologie MS SQL Serveru. Jde vlastně o to, že 2 (nebo více) uživatelé dělají operaci, která zamyká to "samé", nejčastěji např. realizace dokladu, zaúčtování apod. Přičemž SQL Server jednomu uživateli ohlásí hlášku 1205 a druhého nechá doběhnout.
Čím je hardware serveru pomalejší, tím ta operace trvá déle a je pravděpodobnější, že dojde k deadlocku. Čím více uživatelů se pokouší v jednom okamžiku dělat to "samé" (přistupovat do stejných objektů, tabulek), tím je pravděpodobnější, že dojde k deadlocku.
Řešení:
Řešení není jednoduché - klíčem k řešení je deadlock detekovat (ideálně pokud se dá nasimulovat scénář, při kterém k deadlocku dochází), zjistit procesy a SQL kód, které jsou v něm zainteresovány a následně se snažit zavést praktiku k eliminaci deadlocku (přeprogramovat, podpořit operaci indexem). Vždy se však dá začít "od píky" a aplikovat základní doporučení ohledně údržby a provozu databází, MS SQL Serveru obecně.
Více k obecným doporučením zde:
https://forum.helios.eu/orange/forum/viewforum.php?f=6
Např. databáze se reindexuji (=defragmentují) - Možnosti -> Konfigurace / správa systému -> Systémové konstanty - vybrat databázi - akce Údržba databáze a dát volbu Provést údržbu databáze nyní . Při větších (živějších) databázích provádět údržbu pravidelně - denně). Dále NIKDY !!! neprovádět SHRINK databáze, atd.
Dále zaměřit pozornost na veškerá externí řešení, zejm. počítané sloupce, definované vazby, triggery - zejm. ty "komplexní" (čti složité, spojující velké množství tabulek, nevhodně/neoptimálně napsané, apod.) a pokusít se je pro účely testování vyřadit z provozu a následně optimalizovat.
Informace v tomto příspěvku nejsou a ani nemohou být vyčerpávající. Jedná se o komplexní problematiku, která vyžaduje individuální přístup ve všech fázích - analýzy /detekce problému, získávání potřebného know-how, řešení. V případě, že problém nastává při definovatelném scénáři v rámci standardního Helios Orange (bez externích řešení), informujte o tomto scénáři prostřednictvím e-mailové linky hotline.
Další zdroje informací:
http://cs.wikipedia.org/wiki/Deadlock
https://www.simple-talk.com/sql/database-administration/handling-deadlocks-in-sql-server/
https://www.simple-talk.com/sql/performance/sql-server-deadlocks-by-example/
http://msdn.microsoft.com/en-us/library/ms188246.aspx