sql >> Databáze >  >> RDS >> Sqlserver

Vyhněte se zablokování pomocí nápovědy NOLOCK

Očekává se občasné zablokování na RDBMS, které se zamyká jako SQL Server/Sybase.

Na klientovi můžete kódovat a zkusit to znovu podle doporučení mého MSDN "Handling Deadlocks" .V podstatě prozkoumejte výjimku SQLException a možná o půl sekundy později to zkuste znovu.

V opačném případě byste měli zkontrolovat svůj kód, aby všechny přístupy k tabulkám byly ve stejném pořadí. Nebo můžete použít SET DEADLOCK_PRIORITY ke kontrole toho, kdo se stane obětí.

Na MSDN pro SQL Server existuje "Minimalizace zablokování" která začíná

Toto také zmiňuje „Použít nižší úroveň izolace“, což se mi nelíbí (stejně jako mnoho typů SQL zde na SO) a je to vaše otázka. Nedělej to je odpověď... :-)

Poznámka:MVCC typu RDBMS (Oracle, Postgres) tento problém nemají. Viz http://en.wikipedia.org/wiki/ACID#Locking_vs_multiversioning ale MVCC má jiné problémy.



  1. Souhrnná funkce za daný časový interval

  2. Použijte Mysql v dev/prod a H2 v testu

  3. PostgreSQL 10 v systému Linux – LC_COLLATE locale en_US.utf-8 není platný

  4. Ukládání dynamických vlastností objektů v SQL