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

O que é um deadlock em um banco de dados?


Em geral, deadlock significa que duas ou mais entidades estão bloqueando algumas fontes, e nenhuma delas consegue finalizar, pois estão bloqueando fontes de forma cíclica.

Um exemplo:digamos que eu tenha a tabela A e a tabela B, preciso fazer alguma atualização em A e depois em B e decido bloquear os dois no momento do uso (esse é um comportamento realmente estúpido, mas serve ao propósito agora ). No mesmo momento, outra pessoa faz a mesma coisa na ordem oposta - bloqueia B primeiro, depois bloqueia A.

Cronologicamente, isso acontece:

proc1:Bloqueio A

proc2:Bloqueio B

proc1:Lock B - começa a esperar até que o proc2 libere B

proc2:Lock A - começa a esperar até que o proc1 libere A

Nenhum dos dois vai terminar. Isso é um impasse. Na prática, isso geralmente resulta em erros de tempo limite, pois não é desejável que nenhuma consulta fique suspensa para sempre, e o sistema subjacente (por exemplo, o banco de dados) matará as consultas que não terminarem a tempo.

Um exemplo do mundo real de um impasse é quando você tranca as chaves de sua casa em seu carro e as chaves do seu carro em sua casa.