O bloqueio do SQL Server é uma característica normal dos sistemas de banco de dados do SQL Server. O bloqueio ocorre quando o SQL Server está atendendo a solicitações de vários clientes e processos diferentes solicitam os mesmos recursos ao mesmo tempo. Se um recurso estiver em uso, ele ficará bloqueado e indisponível para solicitações subsequentes, portanto, o processo será atrasado até que o recurso seja liberado e fique disponível novamente. Os blocos do SQL Server normalmente se resolvem sem um efeito perceptível no desempenho. No entanto, às vezes, os blocos prejudicam o desempenho porque o processo inicial bloqueia o recurso por um longo período de tempo antes de liberá-lo ou porque o processo inicial não libera o recurso, o que torna os recursos inacessíveis até que o bloco seja liberado. resolvido manualmente.
Quando um conjunto de recursos é bloqueado por um período significativo de tempo, a qualidade do desempenho diminui a ponto de os usuários do sistema começarem a perceber problemas. Esses problemas incluem coisas como consultas demorando muito para serem executadas ou expirando ou usuários que não conseguem salvar as telas que modificaram.
Como corrigir bloqueios do SQL Server
A solução de curto prazo para o bloqueio do SQL Server é identificar e desbloquear manualmente a transação quando você perceber que o desempenho está sendo afetado negativamente por um ou mais blocos.
Depois de confirmar a presença de um bloco do SQL Server, verifique o monitor de atividade do SQL Server e elimine as consultas que estão causando mais problemas. Você também pode usar scripts SQL para monitorar continuamente o estado de bloqueio e bloqueio no SQL Server. Brent Ozar sugere adicionar alguns contadores de desempenho específicos de bloqueio para que o SQL Server o notifique quando você exceder os limites de bloqueio designados.
Como evitar bloqueios do SQL Server
É útil para um administrador de banco de dados saber como corrigir um bloco do SQL Server. Mas para manter um sistema de alto desempenho, é ainda melhor saber como prevenir – ou pelo menos minimizar – a ocorrência de bloqueios. Aqui estão quatro dicas para minimizar alguns tipos comuns de bloqueio do SQL Server:
1. Usar índices
O uso de índices clusterizados em tabelas de alto uso ajuda a reduzir o bloqueio, solicitando que o otimizador de consulta execute uma busca de índice em vez de uma verificação de índice. Quando apenas o registro que está sendo atualizado está bloqueado, os processos subsequentes podem contornar o bloqueio e podem ser concluídos.
Também é importante garantir que as instruções UPDATE e DELETE usem índices. Os índices ajudam as instruções UPDATE e DELETE a reduzir o número de bloqueios de modificação que eles adquirem usando índices não clusterizados ou dicas de índice para remover bloqueios.
2. Limpe suas consultas
Uma prática recomendada para evitar bloqueios do SQL Server é dividir transações longas em várias transações mais curtas. As consultas de longa duração mantêm um bloqueio durante a transação, tornando o recurso indisponível para outros processos. A divisão de transações longas em transações curtas mantém os dados em movimento.
Considere usar o ajuste do SQL Server para tornar as consultas o mais eficientes possível. Um bom otimizador de consultas gravará e reescreverá consultas até que sejam configuradas para reduzir o número de blocos que podem diminuir o desempenho.
3. Identifique a causa raiz do bloqueio do SQL Server
Acompanhar as métricas de desempenho ao longo do tempo é uma ótima maneira de evitar o bloqueio do SQL Server. Ao localizar quais sessões são bloqueadas com frequência e quais instruções estão envolvidas, você pode determinar um curso de ação para remover as causas principais de bloqueios recorrentes por meio de indexação, otimização de consulta ou outros meios.
Outro lugar para procurar a causa raiz do bloqueio é a carga de trabalho do sistema. Execute uma análise de carga de trabalho para determinar se houve um aumento. Uma carga de trabalho muito pesada causará o bloqueio do SQL Server à medida que o número crescente de consultas se acumulam aguardando o acesso a recursos bloqueados. Pode ser necessário adicionar índices ou distribuir a carga de trabalho em vários bancos de dados para resolver problemas de desempenho de carga de trabalho pesada.
4. Mantenha suas estatísticas atualizadas
Estatísticas desatualizadas podem acionar a execução de planos de consulta ineficientes porque o plano não foi atualizado para levar em conta as alterações. O SQL Server iniciará rastreamentos de pesquisa para procurar dados movidos ou ausentes, que, por sua vez, criarão blocos.
A maneira mais eficaz de manter as estatísticas atualizadas é automatizar o maior número possível de atualizações. Onde você não conseguir agendar atualizações automáticas, certifique-se de adicionar atualizações manuais à sua lista de verificação de manutenção programada para garantir que as atualizações sejam feitas regularmente.
O bloqueio do SQL Server pode ser um fato da vida do DBA, mas existem maneiras de mitigar seu impacto no desempenho do banco de dados do SQL Server. Quebre o ciclo de bloqueio-desbloqueio implementando algumas das estratégias discutidas acima. Com um pouco de planejamento, otimização e automação, é possível reduzir a ocorrência de bloqueio do SQL Server e, em algumas circunstâncias, erradicá-lo completamente.