14 de Enero 2004

El Abrazo de la muerte

Un deadlock es una situación que se produce cuando dos transacciones luchan por el mismo recurso, el resultado es tan feo como esto...


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

Lo primero que hay que averiguar son las tablas en las que se están produciendo bloqueos, y los comandos que lanzan las transacciones.

Una vez más el infalible I.A. (y lo digo en el sentido más amplio de la palabra) me enseño como habilitar las trazas de SQL para que sea un poco más "verboso" de lo habitual.

 dbcc traceon(1204,3506)
 

para comprobar el status

 dbcc tracestatus
 

Una vez activada la traza, y reproducido el error, el resultado que deja en el LOG es el siguiente:

 Deadlock encountered .... Printing deadlock information
 
 

Wait-for graph

Node:1
TAB: 2:2009058193 [] CleanCnt:1 Mode: X Flags: 0x0
Grant List::
Owner:0x1c3b5260 Mode: X Flg:0x0 Ref:1 Life:02000000 SPID:52 ECID:0
SPID: 52 ECID: 0 Statement Type: SELECT Line #: 1
Input Buf: Language Event: select * from a (tablockx)

Requested By:
ResType:LockOwner Stype:'OR' Mode: X SPID:51 ECID:0 Ec:(0x1c657890) Value:0x1c3b51c0 Cost:(0/0)

Node:2
TAB: 2:1993058136 [] CleanCnt:1 Mode: X Flags: 0x0
Grant List::
Owner:0x1c3b52e0 Mode: X Flg:0x0 Ref:1 Life:02000000 SPID:51 ECID:0
SPID: 51 ECID: 0 Statement Type: SELECT Line #: 1
Input Buf: Language Event: select * from b (tablockx)

Requested By:
ResType:LockOwner Stype:'OR' Mode: X SPID:52 ECID:0 Ec:(0x1c593890) Value:0x1c3b5380 Cost:(0/0)
Victim Resource Owner:
ResType:LockOwner Stype:'OR' Mode: X SPID:52 ECID:0 Ec:(0x1c593890) Value:0x1c3b5380 Cost:(0/0)


Posted by rido at 11:50 PM | Comments (17)