none
trava o SQL Server em Update na tabela RRS feed

  • Pergunta

  • Pessoal, estou com seguinte problema. Tenho a tabela de Serviços na Base que tem aproximadamente 300 registros armazenados que classifica as categorias de serviços prestados pela empresa. Quando é executo a instrução UPDATE servico SET servico_categoria = 'D' WHERE cod_Servico = 001 a atualização entra em loop indefinido travando o sistema. É necessário encerrar a execução para que os usuários voltem a utilizar o sistema. Usando a instrução SELECT * FROM servico WHERE cod_servico = 001 o retorno é em milisegundos. Estou tentando ainda identificar o porque a tabela não está permitindo fazendo a atualização no campo descrito, demorando tanto pra efetivar uma atualização tão simples. Gostaria de ter a ajuda dos colegas.

    Agradeço desde já!

    quarta-feira, 16 de janeiro de 2013 22:46

Respostas

  • Olá Jeferson,

    Você ja tentou realizar esse update pelo SQL Server Management Studio e ver como se comporta? Se mesmo pelo Management Studio você pegar esse problema, execute esse comando select session_id,start_time,status,command,blocking_session_id,wait_type from sys.dm_exec_requests where command like '%UPDATE%' Assim você identificar de primeira mão o que está acontecendo nessa consulta.

    Aconselho a criar a procedure sp_WhoIsActive http://sqlblog.com/blogs/adam_machanic/archive/2012/03/22/released-who-is-active-v11-11.aspx caso você não tenha e executa-la também no momento do update que está gerando o problema.

    Se a resposta foi útil, classifique-a


    Att,
    Marcos Freccia [MTA|MCTS|MCITP|MCT SQL Server 2008]
    Blog|Twitter
    Assine também os feeds clicando aqui

    quinta-feira, 17 de janeiro de 2013 13:28

Todas as Respostas

  • Bom dia Jerfeson,

    O que parece é a transação de update está gerando um bloqueio. Por acaso vc está usando o controle de transações explicitas? (open tran/commit)? Verifique durante o momento que ele está "travado" se existe a ocorrencia de algum block.... utilize a sp_who2 ou sp_lock

    At.
    rafael

    quinta-feira, 17 de janeiro de 2013 13:27
  • Olá Jeferson,

    Você ja tentou realizar esse update pelo SQL Server Management Studio e ver como se comporta? Se mesmo pelo Management Studio você pegar esse problema, execute esse comando select session_id,start_time,status,command,blocking_session_id,wait_type from sys.dm_exec_requests where command like '%UPDATE%' Assim você identificar de primeira mão o que está acontecendo nessa consulta.

    Aconselho a criar a procedure sp_WhoIsActive http://sqlblog.com/blogs/adam_machanic/archive/2012/03/22/released-who-is-active-v11-11.aspx caso você não tenha e executa-la também no momento do update que está gerando o problema.

    Se a resposta foi útil, classifique-a


    Att,
    Marcos Freccia [MTA|MCTS|MCITP|MCT SQL Server 2008]
    Blog|Twitter
    Assine também os feeds clicando aqui

    quinta-feira, 17 de janeiro de 2013 13:28
  • Agora um detalhe observado é que tenho um server com SQL Server 2008, no qual restaurei a base pra testar o update na mesma tabela e analisar o problema pra evitar trava a aplicação e a instrução executou sem problemas. Seria normal??
    quinta-feira, 17 de janeiro de 2013 14:09
  • Jeferson,

    Isso vai depender muito de como sua aplicação lida com essa instrução. Você chegou a realizar os procedimentos que listei acima?

    Se a resposta foi útil, classifique-a


    Att,
    Marcos Freccia [MTA|MCTS|MCITP|MCT SQL Server 2008]
    Blog|Twitter
    Assine também os feeds clicando aqui

    quinta-feira, 17 de janeiro de 2013 15:30
  • Marcos, executei a atualização através do console do manager e não apresentou o problema. O SQL Server 2008 é usado no server de contigência e resolvi fazer o restore com intuito de analisar o ocorrido com mais profundidade evitando interrupções no sistema, pois ao executar a instrução no server de produção o mesmo trava a aplicação e nisso é preciso encerrar para que os usuários possam usar. Sobre o procedimento o mesmo não serve pra SQL Server 2000, apenas pra as versões 2005 e 2008. No 2000 usei o procedimento sp_who2 e analisei a coluna BlkBy para ver se existia algum processo em bloqueou. Não econtrado nenhum bloqueio decidi verificar no manager as atividades de processo e objetos em Locks/ Process ID e Locks/Objet e encontrei as informações descritas na imagem. Gostaria de uma explicação para entender melhor. Esses spid na imagem 01 é referente a prováveis problemas e os objetos na imagem 02 das tabelas ctf e lta é algum problema a ser resolvido??

    quinta-feira, 17 de janeiro de 2013 18:00
  • Problema resolvido pessoal. Verifiquei usando as procedures citadas e não identifiquei nenhum bloqueio. Rodei novamente a instrução de UPDATE funcionando sem problemas.

    Obrigado pela atenção de todos!

    sexta-feira, 18 de janeiro de 2013 23:14