Estou tendo problemas com um banco de dados.
Posso executar consultas básicas, embora muito mais lentas que o normal.
Quando tento exibir as árvores de hierarquia para tabelas, exibições ou procedimentos no SSMS Object Explorer, recebo arquivos
lock request time out period exceeded
.Meus relatórios do SSRS executados em objetos neste banco de dados não estão mais sendo concluídos.
Os trabalhos associados aos procedimentos armazenados nesse banco de dados também não são executados.
Tentei usar sp_who2
para encontrar e matar todas as conexões no banco de dados, porém isso não resolveu o problema.
O que está acontecendo aqui? Como posso resolver isto?
Estava sendo causado por uma reversão perpétua de uma transação. Tive que eventualmente reiniciar meu cluster de servidor
Excluindo a consideração de Harware, talvez você precise executar o script para verificar quais são as atividades retendo a Sessão SQL, um dos cenários comuns é não usar um
Implicit transactions Option
no SQL Server Management Studio.Eu tive esse problema quando iniciei uma transação explícita na qual criei uma tabela em tempdb a partir de um script em execução em outro banco de dados (não tempdb). Quando eu fiz o commit da transação, o commit não pareceu liberar o bloqueio na tabela que eu criei no tempdb.
Graças a esta página , eu
USE
d tempdb e executeiDBCC OPENTRAN
e obtive o SPID da conexão com o tempdb que estava causando o bloqueio. Então euKILL <SPID number>
para matá-lo.Não muito gracioso, e perdi todas as informações da tabela que criei no tempdb, mas no meu caso tudo bem.
Como muitos já haviam apontado, geralmente há uma transação de longa duração, principalmente causada pela falta de uso de SET IMPLICIT TRANSACTIONS ON, que não deve ser usado de forma alguma. Para ver por que verifique o artigo perspicaz de Brent Ozar
De qualquer forma, você pode obter uma lista de transações pendentes de longa duração usando a seguinte consulta.
https://www.brentozar.com/archive/2018/02/set-implicit_transactions-one-hell-bad-idea/
"Quando tento exibir as árvores de hierarquia para tabelas, exibições ou procedimentos no SSMS Object Explorer, o período de tempo limite da solicitação de bloqueio é excedido."
Eu tive exatamente o mesmo problema. Fui até a janela de execução da consulta e; declaração digitada e executada
ROLLBACK
.Parece que algumas das séries de instruções que eu estava executando antes disso mantinham transações abertas. Especificamente, porque alguns deles eram instruções DDL. Uma vez que eu emiti o rollback, as hierarquias de objetos começaram a funcionar.
No meu caso, era alguém executando uma transação com
BEGIN TRAN
mas nãoROLLBACK
ouCOMMIT
.A transação estava bloqueando as tabelas do sistema.
Estes são os comandos que me ajudaram a depurar e resolver o problema:
Há tantas coisas que isso pode acontecer que tudo o que posso oferecer são algumas perguntas para ajudar a guiá-lo em direção a uma resposta.
O banco de dados em um servidor dedicado apenas à execução do SQL Server? Caso contrário, outros processos podem estar interferindo, roubando tempo precioso do processador.
O servidor de banco de dados está essencialmente sem memória? O SQL Server tentará alocar cada byte que puder, mas se estiver na capacidade máxima e suas consultas exigirem que mais dados sejam carregados, ele terá que recorrer ao uso de memória virtual, o que aumenta radicalmente a quantidade de tempo que até mesmo consultas simples podem levar.
A largura de banda da rede do servidor de banco de dados é pequena para lidar com a transferência de dados em tempo hábil?
No final do dia, parece que a máquina na qual você está hospedando o SQL Server está subdimensionada para o que você está tentando fazer. É perfeitamente possível que você finalmente tenha atingido os limites de hardware em que o desempenho está caindo radicalmente. Se esse for o caso (as perguntas acima ajudarão você a determinar isso), convém mover o banco de dados para um servidor que seja dimensionado adequadamente para a quantidade de dados (e consultas) que você está tentando processar.
Isso pode significar usar processadores mais rápidos, unidades mais rápidas ou apenas instalar mais RAM.
Eu tive esse erro pop-up após a conclusão de uma operação de redução de banco de dados (mas não liberei o espaço). Para fixar isso:
Eu tive um problema em que, após atualizar o procedimento armazenado, a atualização não estava sendo salva e, ao tentar acessar novamente, estava recebendo essa mensagem de erro que o tempo limite da solicitação de bloqueio excedeu, simplesmente desmarquei a transação Set implícita e isso funcionou para mim