Erro: quot;Transaction was deadlocked... quot;

18/01/2005

Pessoal, tenho uma aplicação rodando em SQL Server a + de 2 anos e nas ultimas semanas um cliente me reportou o seguinte erro:

Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.


+ detalhes do erro: [url]www.vipcomputadores.com.br/erro.html[/url]

alguem saberia me dizer oq significa, e como foi ocasionado??

Grato
Ermindo



[b:c5a2880d89]Título removido: ´Aos DBAs de Plantao - ERRO Estranho´[/b:c5a2880d89]
Sandra/Moderação


Ermindo

Respostas

18/01/2005

Gandalf.nho

[b:f929d05ac4][color=red:f929d05ac4]Notificação de Infração às Regras de Conduta :[/color:f929d05ac4][/b:f929d05ac4]

Título desafiador e não descritivo

Para maiores esclarecimentos pode mandar-me uma [url=http://delphiforum.icft.com.br/forum/privmsg.php?mode=post&u=8378]Mensagem Particular[/url].


Responder Citar

18/01/2005

Marcus.magalhaes

Boa tarde.

Um dead lock ocorre qdo dois processos concorrentes necessitam de recursos bloqueados entre eles, ex.:
[color=red:0a9e3583ad]
Processo A inicia transação
Processo B inicia transação
Processo A atualiza tabela A (ocasiona lock exclusivo)
Processo B atualiza tabela B (ocasiona lock exclusivo)
Processo A tenta atualizar tabela B (fica aguardando até que o lock seja terminado)
Processo B tenta atualizar tabela A (fica aguardando até que o lock seja terminado)[/color:0a9e3583ad]

[color=blue:0a9e3583ad]Como o lock nunca será terminado, pois para isso ocorrer, um processo necessita ser cancelado, [b:0a9e3583ad]o SS identifica qual processo tem menos tempo de CPU (visando gerar o mínimo de rollback)[/b:0a9e3583ad] e o mata liberando a tabela para o outro processo ser finalizado.[/color:0a9e3583ad]

No exemplo acima o processo B seria finalizado.

Para evitar que ocorram Dead Locks é ideal que os processos tentem usar as tabelas sempre na mesma sequencia. Ex.:
[color=red:0a9e3583ad]
Processo A inicia transação
Processo B inicia transação
Processo A atualiza tabela A (ocasiona lock exclusivo)
Processo B atualiza tabela A (fica aguardando até que o lock seja terminado)
Processo A atualiza tabela B (ocasiona lock exclusivo)
Processo A termina a transação
Processo B consegue atualizar tabela A (ocasiona lock exclusivo)
Processo B atualiza tabela B (ocasiona lock exclusivo)
Processo B termina a transação[/color:0a9e3583ad]

Espero ter ajudado.

Att,


Responder Citar

30/08/2005

Flavio Sanches

Seguinte: Administro uma base de dados de cerca de 60 GB (SQLServer 2000). Meus HDs tem 70 Gb e minha base não pode crescer muito por absoluta falta de espaço. Acontece que ultimamente, quando eu executo o shrink (preciso fazer isso toda semana pra evitar um crescimento muito grande) ele retorna esse erro. Entrei em contato com outros profissionais e eles levantaram a possibilidade de ser por causa do pouco espaço do HD então eu tirei o LDF desse HD, liberando assim 13 gb, só que ainda dá o mesmo erro. Queria saber por que isso acontece e como eu faço pra resolver o problema.

abraço


Responder Citar

03/09/2005

Marcus.magalhaes

bom dia.

Utilize [b:4c05d064f8]dbcc shrinkfile(´nome do arquivo´, tam_desejado)[/b:4c05d064f8]

Porém receber erro de deadlock durante um shrink eu nunca vi.

Quais são os tamanhos dos seus discos e a distribuição dos seus arquivos?

Att,


Responder Citar

05/09/2005

Flavio Sanches

Dados 50 GB e log 15 Gb
Ambos num raid 1 de 2 HD´s scsi de 70 Gb.

O que eu já fiz? Fiz o seguinte: Renomeei o arquivo de log e atachei o banco dinovo e ele criou assim, um arquivo novo.

Agora, o erro no srhink que acontecia 100¬ das vezes, agora acontece 50¬ das vezes.

grato pela dica!

Flávio Sanches


Responder Citar