Problema con Bloqueos

25/09/2005 - 17:24 por ernessan | Informe spam
Hola a todos y gracias por leer esto:

Tengo un problema q estoy un poco perdido en la solucion.

El tema es que tengo un sp que a su vez llama a varios sp. De estos sp hijos
hay varios que tiene cursores para recuperar la informacion.

El sp principal tiene una transaccion q termina al terminar su ejecucion,
pero mi problema viene en que al llamar al sp desde dos maquina diferentes
se produce un interbloqueo, que me lo jode todo

Mirando la actividad actual veo que una tabla que utilizo dentro de un sp
hijo que tiene un cursor, esta bloqueada muchas veces. Yo esa tabla en
concreto la utilizo dentro del sp solo para consulta.

Las preguntas son:
como podria evitarme esos bloqueos?
es problema de los cursores?
si es asi, un cursor bloquea todas las filas de una tabla?
Como podria yo indicar que solo quiero que me bloque la fila que esta
leyendo solo y no todo?

Se podria crear un transaccion que me englobara todo el proceso y ademas
crear otra por cada sp hijo, ayudaria en algo??


Tengo muchas mas preguntas, pero con esas me podria orientar

Espero haberme explicado bien

M;uchas gracias

Ernessan.

Preguntas similare

Leer las respuestas

#1 Maxi
25/09/2005 - 18:43 | Informe spam
Hola, la respuesta es muy simple!! el uso de cursores no es una buena idea y
no se deberian usar a menos que no exista otra opcion. Elimina el cursor y
piensa sin el y veras como todo se soluciona de una manera muy simple :-)


Culminis SQL-Server Speakers (http://latam.culminis.com)

Maxi - Buenos Aires - Argentina
Msn_messager:
mail: Maxi.da[arroba]gmail.com

"ernessan" <ernestoARROBAbyte-factory.com> escribió en el mensaje
news:O$
Hola a todos y gracias por leer esto:

Tengo un problema q estoy un poco perdido en la solucion.

El tema es que tengo un sp que a su vez llama a varios sp. De estos sp
hijos
hay varios que tiene cursores para recuperar la informacion.

El sp principal tiene una transaccion q termina al terminar su ejecucion,
pero mi problema viene en que al llamar al sp desde dos maquina diferentes
se produce un interbloqueo, que me lo jode todo

Mirando la actividad actual veo que una tabla que utilizo dentro de un sp
hijo que tiene un cursor, esta bloqueada muchas veces. Yo esa tabla en
concreto la utilizo dentro del sp solo para consulta.

Las preguntas son:
como podria evitarme esos bloqueos?
es problema de los cursores?
si es asi, un cursor bloquea todas las filas de una tabla?
Como podria yo indicar que solo quiero que me bloque la fila que esta
leyendo solo y no todo?

Se podria crear un transaccion que me englobara todo el proceso y ademas
crear otra por cada sp hijo, ayudaria en algo??


Tengo muchas mas preguntas, pero con esas me podria orientar

Espero haberme explicado bien

M;uchas gracias

Ernessan.







Respuesta Responder a este mensaje
#2 Eleazar
26/09/2005 - 19:05 | Informe spam
ademas de la respuesta anterior usa la instruccion nolock.
(books on line) table hints

"ernessan" <ernestoARROBAbyte-factory.com> escribió en el mensaje
news:O$
Hola a todos y gracias por leer esto:

Tengo un problema q estoy un poco perdido en la solucion.

El tema es que tengo un sp que a su vez llama a varios sp. De estos sp


hijos
hay varios que tiene cursores para recuperar la informacion.

El sp principal tiene una transaccion q termina al terminar su ejecucion,
pero mi problema viene en que al llamar al sp desde dos maquina diferentes
se produce un interbloqueo, que me lo jode todo

Mirando la actividad actual veo que una tabla que utilizo dentro de un sp
hijo que tiene un cursor, esta bloqueada muchas veces. Yo esa tabla en
concreto la utilizo dentro del sp solo para consulta.

Las preguntas son:
como podria evitarme esos bloqueos?
es problema de los cursores?
si es asi, un cursor bloquea todas las filas de una tabla?
Como podria yo indicar que solo quiero que me bloque la fila que esta
leyendo solo y no todo?

Se podria crear un transaccion que me englobara todo el proceso y ademas
crear otra por cada sp hijo, ayudaria en algo??


Tengo muchas mas preguntas, pero con esas me podria orientar

Espero haberme explicado bien

M;uchas gracias

Ernessan.







Respuesta Responder a este mensaje
#3 ernessan
26/09/2005 - 21:29 | Informe spam
Hola a todos de Nuevvo.


El tema es el siguiente:

Tenia una aplicacion con cursores la cual me daba miles de problemas con
bloqueos e interbloqueos, hasta el punto de modificar todos los sp. eliminar
todos los cursores y cambiarlo todo por variables de tipo tabla en la cual
inserto los valores que antes recorria con el cursor. Ahora utilizon un
While para recorreme las variable de tipo tabla de la siguiente manera:


DECLARE @dTraspaso TABLE(
rowId INT Identity,
DTraspaso INT NOT NULL,
IdArticulo INT NOT NULL)


INSERT INTO @dTraspaso
SELECT DTRA_IdDTraspaso,DTRA_IdArticulo
FROM DTraspaso001 WITH (NOLOCK)
WHERE DTRA_IdCTraspaso=@lIdCTraspaso


SELECT @iNumFilasDTraspaso=COUNT(*)
FROM @dTraspaso



set @iContadorDTraspaso=0

while @iContadorDTraspaso<@iNumFilasDTraspaso
begin
set @iContadorDTraspaso = @iContadorDTraspaso + 1

SELECT @lIdDTraspaso=DTraspaso,@lIdArticulo=IdArticulo
FROM @dTraspaso
WHERE ROWID=@iContadorDTraspaso

resto de instrucciones


CONTINUE
end

Dentro del cuerpo de ese bucle tengo otros dos bucles similares de tablas
hijas que recorro de la misma manera.

El caso es que al ejecutar la aplicacion desde vb en dos maquinas diferentes
cada una con una transaccion desde vb, se me producen interbloqueos.

que estoy haciendo mal??

En ese caso, que seguro que si, como podria recorrer una tabla A, que tiene
una tabla hija B con N registros, y la tabla B tiene una Tablas Hija C con
N registors
que debo recorrer si usar cursores ni variables de tipo tabla?? No se
me ocurre nada.

Existe alguna manera de definir los bloqueos o debo dejar tarbajar al
servidor por si solo??
Porque me bloquea las tablas que tienen select??

Muchas gracias por su ayuda

Ernessan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida