Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Evitando deadlock usando a dica NOLOCK


Deadlocks ocasionais em um RDBMS que bloqueia como SQL Server/Sybase são esperados.

Você pode codificar no cliente para tentar novamente conforme recomendado meu MSDN "Handling Deadlocks" .Basicamente, examine o SQLException e talvez meio segundo depois, tente novamente.

Caso contrário, você deve revisar seu código para que todos os acessos às tabelas estejam na mesma ordem. Ou você pode usar SET DEADLOCK_PRIORITY para controlar quem se torna vítima.

No MSDN para SQL Server há "Minimizing Deadlocks" que começa

Isso também menciona "Usar um nível de isolamento mais baixo" que eu não gosto (o mesmo que muitos tipos de SQL aqui no SO) e é sua pergunta. Não faça isso é a resposta... :-)

Observação:MVCC tipo RDBMS (Oracle, Postgres) não tem esse problema. Consulte http://en.wikipedia.org/wiki/ACID#Locking_vs_multiversioning mas MVCC tem outros problemas.