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

Bloquear, bloquear, bloquear na porta de DBAs com bloqueio do SQL Server


Embora todos saibamos que o bloqueio é essencial para a integridade dos dados, isso não muda o fato de que pode ser um espinho sério no seu lado!

Quando vemos bloqueios em nosso banco de dados, geralmente assumimos que algo está errado – nem sempre é esse o caso. Na minha experiência, a maioria dos bloqueios do SQL Server é legítima, mas precisa ser investigada e compreendida. Os impasses, por outro lado, raramente são legítimos! Os deadlocks são considerados críticos no mundo do SQL Server porque os processos são encerrados automaticamente, pois o SQL Server resolve os deadlocks sem exigir intervenção manual. Novamente, mesmo que estejam “resolvidos”, eles definitivamente precisam ser investigados e compreendidos.

Existem algumas estratégias de design que podem ajudar a reduzir as ocorrências de bloqueios e deadlocks do SQL Server em seu banco de dados:
  • Use índices clusterizados em tabelas de alto uso
  • Evite instruções SQL de alta contagem de linhas
  • Divida transações longas em muitas transações mais curtas
  • Certifique-se de que as instruções UPDATE e DELETE usem índices
  • Não programe trabalhos de atualização em lote para sobreposição
  • Mantenha suas estatísticas atualizadas

E tenho certeza de que há muito mais, mas a realidade é que você pode seguir todas as melhores práticas que puder imaginar e ainda ter bloqueios e impasses. Isso ocorre porque, na maioria dos casos, os deadlocks são causados ​​por código de aplicativo mal projetado. (A toca do coelho do design de aplicativos:codificação, isolamento de transações e padrões de acesso. Mas, por enquanto, vamos nos concentrar em investigar e entender bloqueios e impasses).

Bloqueio e impasses do SQL Server


O primeiro desafio com bloqueios e deadlocks é identificar quando e onde eles estão acontecendo porque geralmente não são relatados, relatados após o fato ou resolvidos automaticamente. Para obter uma compreensão real do que está acontecendo em seu banco de dados em relação a bloqueios e impasses, você precisa ver suas ocorrências ao longo do tempo. Além disso, para corrigir o problema e interromper ocorrências futuras, você precisa chegar à causa raiz do bloqueio - armando-se com informações que você precisa retransmitir aos desenvolvedores do aplicativo e, assim, acabar com o jogo de culpa entre os desenvolvedores. e DBAs.

É por isso que gosto muito do Workload Analyzer em Spotlight Cloud. Posso selecionar um intervalo de tempo – uma hora, um dia ou um intervalo personalizado – e visualizar o Bloqueio -atividade relacionada para esse intervalo. Imediatamente, eu tenho uma melhor compreensão do que está acontecendo! Posso ver padrões de bloqueio, comparar a taxa de bloqueio ao longo do tempo com um intervalo de tempo anterior, ver a taxa de bloqueio em um período de tempo específico e exibir KPIs de bloqueio, como Bloquear Exclusivo, Compartilhado e Atualizar.



Então agora eu quero chegar à causa raiz – é onde Árvore de Dimensões Eu posso detalhar e filtrar as informações para um período de tempo específico, o que me permite ver as mesmas informações em dimensões mais profundas, como Bancos de dados , Usuários , Programas e Instruções SQL , enquanto filtra o “ruído branco” à medida que progrido – identificando claramente a(s) fonte(s) do meu problema.

Aqui estou vendo quais Bancos de dados estão experimentando o maior bloqueio durante o intervalo de tempo:



Agora, detalharei os Usuários dentro do banco de dados selecionado:



Em seguida, escolherei ver a lista de Instruções SQL causando bloqueio que foi executado pelo Usuário selecionado no Banco de dados selecionado para o Intervalo de tempo especificado .



Agora, posso ver todos os Bloqueios informações relacionadas para a Instrução SQL selecionada .



Portanto, se você deseja chegar ao fundo de seus problemas de bloqueio, bloqueio e impasse, recomendo que você verifique o Spotlight Cloud. O Spotlight Cloud torna mais fácil do que nunca investigar e entender os problemas de bloqueio no banco de dados e, por fim, garantir que o código do aplicativo esteja livre de deadlock.