INTERBLOQUEOS

02/10/2006 - 14:52 por Estrategix | Informe spam
Hola a todos:

HEmos desarrollado en Sharepoint Portal Server 2003, un webpart que permite
aprobar o rechazar facturas, este webpart realiza una serie de tareas y
justamente la ultima permite la ejecución de un procedimiento almacenado.

La ejecución d ecada una d elas facturas se realiza mediante threads, lo que
quiere decir, es que por cada factura se abre un thread, se jecutan las
tareas y se ejecuta el procedimiento almacenado.

El mensaje de la BBDD que nos devuelve es el siguiente:

/////////////////////////////////////////////////////////////////////////////////

Función ActualizaERP con SQL: declare @NumeroFactura nvarchar(17)declare
@CIFProveedor nvarchar(20)declare @Estado nvarchar(17)declare @URLSite
nvarchar(255)set @NumeroFactura = 'F-2006-59'set @CIFProveedor =
'A48035901'set @Estado = 'Aprobada'set @URLSite =
'http://srvsps/sites/facturascoop/Li...m.aspx?IDT'EXECUTE
sp_IWFL_UPDEstadoFacturas @NumeroFactura, @CIFProveedor, @Estado, @URLSite Ha
provocado este error --> Exception: La transacción (Id. de proceso 52) quedó
en interbloqueo en lock recursos con otro proceso y fue elegida como sujeto
del interbloqueo. Ejecute de nuevo la transacción.
facturascoop/Lists/AprobadasUN/DispForm.aspx?IDT
Sep 27 2006 5:32PM[ at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at NPS.Webparts.Utilities.ActualizaERP(String cadenaConexion, String
sitioDestino, String listaDestino, String sitioDestinoRechazadas, String
listaDestinoRechazadas, SPListItem Item, String strEstadoERP)]

///////////////////////////////////////////////////////////////////////////////

es decir, estemensaje que nos da SQL server realmente que significa:

La transacción (Id. de proceso 52) quedó en interbloqueo en lock recursos
con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute de nuevo
la transacción.

Puede ser que el uso de Threads produzca este error, antes no se utilizaban
threads en el webpart, pero se hizo necesario para disminuir el tiempo que
tomaba Sharepoint para actualizar los campos de dichas facturas.

En difinitiva, no tenemos ni idea de porque se produce el INTERBLOQUEO d
elas pelotas

Un saludo y muchas gracias.

Asier.
 

Leer las respuestas

#1 Jesús López
02/10/2006 - 22:49 | Informe spam
El uso de Threads no tiene por qué provocar interbloqueos. Pero ese hilo,
seguramente comienza otra transacción diferente que en algún punto intenta
bloquear un recurso en un orden diferente del que se hace en otra parte del
programa.

Para solucionar el problema tendrías que analizar las transacciones que se
efectúan sobre el servidor y el orden en el que se acceden a los recursos.
Deberías intentar que todas las transacciones accedieran a las tablas en el
mismo orden. También deberías seleccionar el mínimo nivel de aislamiento de
las transacciones que te proporcionaran la coherencia requerida, esto
reduciría los bloqueos y por tanto la probabilidad de interbloqueo.

Saludos:

Jesús López



"Estrategix" escribió en el mensaje
news:
Hola a todos:

HEmos desarrollado en Sharepoint Portal Server 2003, un webpart que
permite
aprobar o rechazar facturas, este webpart realiza una serie de tareas y
justamente la ultima permite la ejecución de un procedimiento almacenado.

La ejecución d ecada una d elas facturas se realiza mediante threads, lo
que
quiere decir, es que por cada factura se abre un thread, se jecutan las
tareas y se ejecuta el procedimiento almacenado.

El mensaje de la BBDD que nos devuelve es el siguiente:

/////////////////////////////////////////////////////////////////////////////////

Función ActualizaERP con SQL: declare @NumeroFactura nvarchar(17)declare
@CIFProveedor nvarchar(20)declare @Estado nvarchar(17)declare @URLSite
nvarchar(255)set @NumeroFactura = 'F-2006-59'set @CIFProveedor > 'A48035901'set @Estado = 'Aprobada'set @URLSite > 'http://srvsps/sites/facturascoop/Li...m.aspx?IDT'EXECUTE
sp_IWFL_UPDEstadoFacturas @NumeroFactura, @CIFProveedor, @Estado, @URLSite
Ha
provocado este error --> Exception: La transacción (Id. de proceso 52)
quedó
en interbloqueo en lock recursos con otro proceso y fue elegida como
sujeto
del interbloqueo. Ejecute de nuevo la transacción.
facturascoop/Lists/AprobadasUN/DispForm.aspx?IDT
Sep 27 2006 5:32PM[ at
System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at NPS.Webparts.Utilities.ActualizaERP(String cadenaConexion, String
sitioDestino, String listaDestino, String sitioDestinoRechazadas, String
listaDestinoRechazadas, SPListItem Item, String strEstadoERP)]

///////////////////////////////////////////////////////////////////////////////

es decir, estemensaje que nos da SQL server realmente que significa:

La transacción (Id. de proceso 52) quedó en interbloqueo en lock recursos
con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute de
nuevo
la transacción.

Puede ser que el uso de Threads produzca este error, antes no se
utilizaban
threads en el webpart, pero se hizo necesario para disminuir el tiempo que
tomaba Sharepoint para actualizar los campos de dichas facturas.

En difinitiva, no tenemos ni idea de porque se produce el INTERBLOQUEO d
elas pelotas

Un saludo y muchas gracias.

Asier.

Preguntas similares