Tentei encontrar algumas informações sobre o bloqueio no SQL Server, mas não consegui encontrar uma explicação concisa sobre o que é e como acontece. Poderia, por favor, me esclarecer?
fonte
Tentei encontrar algumas informações sobre o bloqueio no SQL Server, mas não consegui encontrar uma explicação concisa sobre o que é e como acontece. Poderia, por favor, me esclarecer?
Analogies
Às vezes, ajuda a usar analogias longe dos computadores.
Digamos que você tenha uma bola e dois filhos. Apenas uma criança pode ter a bola a qualquer momento. No entanto, se uma das crianças pega a bola e não a solta porque está distraída (assistindo TV, por exemplo), a outra criança não consegue brincar com a bola.
O outro filho é bloqueado desse recurso.
Se compararmos isso com a TV, por exemplo, várias crianças podem assistir TV a qualquer momento.
Fechaduras
Se passarmos para o mundo dos bancos de dados, veremos que existem diferentes maneiras de usar recursos (assim como nossos dois exemplos acima). Podemos realizar "leituras" ou "gravações".
Quando queremos ler os dados, não há razão para que outros também não possam ler os dados - assim como duas pessoas assistindo TV. No entanto, se queremos escrever os dados, precisamos garantir que ninguém mais os esteja olhando. Se eles estiverem lendo enquanto escrevemos, eles terão leituras "sujas". (Ou seja, eles verão os dados parcialmente gravados, o que será inválido.)
Para garantir que essas leituras sujas nunca ocorram, temos dois tipos principais de bloqueios, bloqueios de leitura e bloqueios exclusivos.
Bloqueio de leitura
Você pode ter várias conexões diferentes lendo da mesma fonte de dados a qualquer momento. Mas, para garantir que ninguém altere esses dados enquanto os lê, eles usam um bloqueio de leitura.
Depois que uma conexão tiver um bloqueio de leitura em um dado, todas as outras conexões deverão aguardar até que o bloqueio de leitura seja liberado para poder gravar os dados. Outros podem, no entanto, executar Read Locks por conta própria no mesmo pedaço de dados.
Bloqueio exclusivo
Se uma conexão deseja atualizar / inserir / excluir um dado, eles precisam executar um bloqueio exclusivo. Isso evita que qualquer outra conexão também bloqueie os dados (tornando o bloqueio exclusivo para essa conexão).
Quando uma conexão possui um bloqueio exclusivo nos dados, nenhuma outra conexão pode ler os dados. Isso ajuda a evitar leituras sujas, garantindo que ninguém possa ler os dados enquanto eles estão sendo gravados.
Bloqueio
"Bloqueio" é simplesmente um termo que significa que uma conexão está bloqueando um recurso quando outra conexão deseja ler ou gravar nele. Isso não significa necessariamente que a conexão do proprietário não a liberará, apenas que ela está atualmente em espera.
Compare isso com uma criança segurando a bola. A criança que segura a bola está impedindo que todas as outras crianças segurem a bola.
Impasse
Eu sei que você não perguntou isso, mas é apenas mais um passo para chegar a impasses (e está diretamente relacionado ao bloqueio).
Os bloqueios podem ocorrer quando você tem duas conexões, cada uma com um bloqueio, mas elas desejam um para o outro. Nesse cenário, é como dois filhos que cada um tem uma bola, mas quer a bola do outro.
Como as crianças, essas conexões não estão dispostas a compartilhar. Cada conexão precisa acessar os dois recursos para continuar. No entanto, eles estão em um estado de bloqueio permanente. Nesse estado, o pai (DBMS) precisa entrar e escolher um perdedor para que um dos filhos (conexões) possa ter acesso aos dois recursos.
Uma vez concluída a conexão "vencedora", ela libera os recursos e, em seguida, a outra conexão ("perdida") pode tentar novamente obter os dois recursos.
Portanto, o conceito de um impasse é onde você tem dois recursos que estão bloqueando um ao outro.
Aqui , você pode ler mais sobre todos os diferentes tipos de bloqueios que o SQL Server tem para oferecer e os diferentes recursos que podem causar bloqueios / deadlocks. O artigo é antigo, mas ainda se aplica ao SQL Server 2000 a 2008 R2. (Existem mais alguns tipos de bloqueios adicionados a versões posteriores do SQL Server, mas isso lhe dará um ponto de partida.)
Ótima explicação de Richard, mas só queria adicionar links à documentação oficial. Estes tópicos foram escritos para o SQL Server 2000, mas muitos dos conceitos permanecem os mesmos hoje:
Compreendendo e evitando o bloqueio
Noções básicas sobre bloqueio no SQL Server
Editar - algumas adições:
Cinco maneiras de combater o bloqueio de vídeo - um vídeo muito recente de Kendra Little (publicado hoje)
O DBA como detetive: Solucionando problemas de bloqueio e bloqueio - por Rodney Landrum
Como identificar problemas de bloqueio com o SQL Profiler - por Brad McGehee
Todos os três são autores e / ou MVPs do SQL Server muito conhecidos.
fonte