Preciso criar um alerta que me notifique quando alguma consulta for bloqueada por mais de 60 segundos. Por exemplo, se alguém tiver uma transação aberta em uma tabela e se esquecer de executar um commit ou um rollback. Isso é possível obter das tabelas do sistema?
relate perguntas
-
Propriedades de redução automática, criptografia e modelo de recuperação no SQL Server 2008 R2
-
A instalação autônoma do cluster do SQL Server 2008 R2 falha com o erro - "Caracteres ilegais no caminho".
-
Migração de banco de dados grande
-
plano de manutenção executado pelo agente
-
Randomizando o conteúdo da tabela e armazenando-o de volta na tabela
Gostei da sugestão de Martin de usar notificações de eventos, então segui seu link de exemplo e montei isso em nosso servidor. Você precisará colocar seu endereço de e-mail na chamada para sp_send_dbmail ou modificar o procedimento para ler endereços de e-mail de uma tabela de configuração de algum tipo. Além disso, ajuste o limite do processo bloqueado ao seu gosto. O resultado é uma mensagem de relatório concisa, com informações sobre os processos bloqueados e bloqueadores.
O tratamento de erros é realmente básico; ele apenas encerra a conversa se receber uma mensagem de erro ou uma mensagem de finalização da caixa de diálogo.
Certifique-se de que o Database Mail esteja configurado em seu sistema para permitir o uso de sp_send_dbmail.
Não tenho certeza se existe alguma maneira mais fácil, mas uma maneira seria primeiro configurar o limite do processo bloqueado para 60 segundos.
Em seguida, configure uma notificação de evento para o arquivo
BLOCKED_PROCESS_REPORT
. Veja esta resposta para obter um código de exemplo para notificações de eventos.Seu procedimento de ativação pode ser usado
sp_send_dbmail
para enviar o e-mail.