Array
(
)

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

Ermindo
   - 18 jan 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: http://www.vipcomputadores.com.br/erro.html

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

Grato
Ermindo

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

Gandalf.nho
   - 18 jan 2005

Notificação de Infração às Regras de Conduta :

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].

Marcus.magalhaes
   - 18 jan 2005

Boa tarde.

Um dead lock ocorre qdo dois processos concorrentes necessitam de recursos bloqueados entre eles, ex.:

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)

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

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.:

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

Espero ter ajudado.

Att,

Flavio Sanches
   - 30 ago 2005

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

Marcus.magalhaes
   - 03 set 2005

bom dia.

Utilize dbcc shrinkfile(´nome do arquivo´, tam_desejado)

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,

Flavio Sanches
   - 05 set 2005

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