Consulta timeout de un Stored Procedure

18/03/2005 - 22:11 por Pablo Suárez | Informe spam
Tengo un problemilla que debe ser algo sencillo, pero no sé como resolverlo:

Ejecuto un proceso como un trabajo con el agente de sql server, lo que
se ejecuta es un stored procedure que en el asistente de consultas tarda
un poco mas de 2 horas. Pero al ejecutarlo desde el agente me da
timeout. El tema es que es un proceso que necesito que se ejecute todas
las noches.

Alguien sabe como evitar el timeout en estos casos?

Muchas gracias,
Pablo

Preguntas similare

Leer las respuestas

#1 MAXI
18/03/2005 - 23:31 | Informe spam
Hola Pablo, un SP que tarda 2hs?? usas cursores no?



Maxi
Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)



"Pablo Suárez" escribió en el mensaje
news:%23IXdP8$
Tengo un problemilla que debe ser algo sencillo, pero no sé como
resolverlo:

Ejecuto un proceso como un trabajo con el agente de sql server, lo que se
ejecuta es un stored procedure que en el asistente de consultas tarda un
poco mas de 2 horas. Pero al ejecutarlo desde el agente me da timeout. El
tema es que es un proceso que necesito que se ejecute todas las noches.

Alguien sabe como evitar el timeout en estos casos?

Muchas gracias,
Pablo
Respuesta Responder a este mensaje
#2 Pablo Suárez
22/03/2005 - 21:49 | Informe spam
MAXI,

Si, ha unas partes del proceso que solo resolverlas mediante procesos
iterativos. El proceso crea una tabla con un resúmen de un conjunto de
tablas, de forma tal que varios campos deben contener una concatenación
de un número no fijo ni con tope de valores provenientes de varias filas
de otras tablas.

MAXI wrote:
Hola Pablo, un SP que tarda 2hs?? usas cursores no?

Respuesta Responder a este mensaje
#3 Maxi
22/03/2005 - 22:55 | Informe spam
Pablo en mis años de trabajo los unicos sp que tardaron mas de 2hs eran
aquellos que funcionaron con cursores.

Si nos pasaras ese SP seguro que te podriamos ayudar mejor :-)


Salu2
Maxi


"Pablo Suárez" escribió en el mensaje
news:%
MAXI,

Si, ha unas partes del proceso que solo resolverlas mediante procesos
iterativos. El proceso crea una tabla con un resúmen de un conjunto de
tablas, de forma tal que varios campos deben contener una concatenación de
un número no fijo ni con tope de valores provenientes de varias filas de
otras tablas.

MAXI wrote:
Hola Pablo, un SP que tarda 2hs?? usas cursores no?

Respuesta Responder a este mensaje
#4 Pablo Suárez
23/03/2005 - 19:29 | Informe spam
Maxi,

Ahí va... según había consultado en varios lados, este tipo de operación
sólo se resuelve en forma iterativa.

Gracias!



CREATE PROCEDURE LlenarAutores AS


SET CONCAT_NULL_YIELDS_NULL OFF

SELECT b.Codigo Codigo,
p.nombres nombres,
p.apellidos apellidos,
p.sexo sexo,
p.nacionalidad nacionalidad

INTO AUXbusqueda
FROM busquedatemp as b, LibroAutores as la, Personas as p
WHERE la.libro = b.codigo AND
la.DatosAutor = p.codigo


SET NOCOUNT ON


DECLARE @codigo int,

@Nombres nvarchar(100),

@Apellidos nvarchar(100),

@NombresAutores nvarchar(300),

@Sexo nvarchar(1),

@Sexos nvarchar(10),

@Nacionalidad nvarchar(3),

@Nacionalidades nvarchar(30)





DECLARE Libros CURSOR FOR

SELECT codigo

FROM busquedatemp



OPEN Libros


FETCH Libros INTO @codigo





WHILE @@Fetch_Status = 0

BEGIN

SET NOCOUNT ON




DECLARE Autor CURSOR FOR

SELECT ab.nombres, ab.apellidos, ab.sexo, ab.nacionalidad

FROM auxbusqueda as ab

WHERE ab.codigo = @codigo


OPEN Autor


FETCH Autor INTO @Nombres,
@Apellidos, @sexo, @nacionalidad



WHILE @@Fetch_Status = 0

BEGIN

IF (@Apellidos <> 'otros')
BEGIN
SELECT @NombresAutores = @NombresAutores + @Apellidos + @Nombres +
'; '
SELECT @Sexos = @Sexos + @Sexo
SELECT @Nacionalidades = @Nacionalidades + @Nacionalidad
END

FETCH Autor INTO @Nombres,
@Apellidos, @sexo, @nacionalidad

END

CLOSE Autor

DEALLOCATE Autor

UPDATE busquedatemp
SET autores = @NombresAutores,
sexoautores = @Sexos,
nacionalidadautores = @nacionalidades
WHERE CURRENT OF Libros

SELECT @NombresAutores = NULL
SELECT @Sexos = NULL
SELECT @Nacionalidades = NULL

FETCH Libros INTO @codigo

END

CLOSE Libros

DEALLOCATE Libros

DROP TABLE auxbusqueda





Maxi wrote:
Pablo en mis años de trabajo los unicos sp que tardaron mas de 2hs eran
aquellos que funcionaron con cursores.

Si nos pasaras ese SP seguro que te podriamos ayudar mejor :-)

Respuesta Responder a este mensaje
#5 Miguel Egea
24/03/2005 - 11:13 | Informe spam
No lo he visto en detalle , pero por lo que parece tienes una tabla
auxbusqueda y una llamada busquedatemp, los nombres de los autores los
tienes en auxbusqueda y quieres ponerlos en busqueda temp y ambas tablas se
relacionan por código. Además en auxbusqueda un solo código puede tener
varios autores, y tu quieres obtenerlos todos juntos.
Si mis suposiciones son correctas, tods los cursores se quedarían en un
update, pero no quiero atreverme a hacerlo sin tener las tablas ?puedes
pasarnos el script de ambas? y confirmar si esto que te digo es correto??

Saludos
Miguel Egea .



"Pablo Suárez" escribió en el mensaje
news:

Maxi,

Ahí va... según había consultado en varios lados, este tipo de operación
sólo se resuelve en forma iterativa.

Gracias!



CREATE PROCEDURE LlenarAutores AS


SET CONCAT_NULL_YIELDS_NULL OFF

SELECT b.Codigo Codigo,
p.nombres nombres,
p.apellidos apellidos,
p.sexo sexo,
p.nacionalidad nacionalidad
INTO AUXbusqueda
FROM busquedatemp as b, LibroAutores as la, Personas as p
WHERE la.libro = b.codigo AND
la.DatosAutor = p.codigo


SET NOCOUNT ON


DECLARE @codigo int,

@Nombres nvarchar(100),

@Apellidos nvarchar(100),

@NombresAutores nvarchar(300),

@Sexo nvarchar(1),

@Sexos nvarchar(10),

@Nacionalidad nvarchar(3),

@Nacionalidades nvarchar(30)





DECLARE Libros CURSOR FOR

SELECT codigo

FROM busquedatemp



OPEN Libros


FETCH Libros INTO @codigo





WHILE @@Fetch_Status = 0

BEGIN

SET NOCOUNT ON




DECLARE Autor CURSOR FOR

SELECT ab.nombres, ab.apellidos, ab.sexo, ab.nacionalidad

FROM auxbusqueda as ab

WHERE ab.codigo = @codigo


OPEN Autor


FETCH Autor INTO @Nombres,
@Apellidos, @sexo, @nacionalidad



WHILE @@Fetch_Status = 0

BEGIN

IF (@Apellidos <> 'otros')
BEGIN
SELECT @NombresAutores = @NombresAutores + @Apellidos + @Nombres + '; '
SELECT @Sexos = @Sexos + @Sexo
SELECT @Nacionalidades = @Nacionalidades + @Nacionalidad
END

FETCH Autor INTO @Nombres,
@Apellidos, @sexo, @nacionalidad

END

CLOSE Autor

DEALLOCATE Autor

UPDATE busquedatemp
SET autores = @NombresAutores,
sexoautores = @Sexos,
nacionalidadautores = @nacionalidades
WHERE CURRENT OF Libros

SELECT @NombresAutores = NULL
SELECT @Sexos = NULL
SELECT @Nacionalidades = NULL

FETCH Libros INTO @codigo

END

CLOSE Libros

DEALLOCATE Libros

DROP TABLE auxbusqueda





Maxi wrote:
Pablo en mis años de trabajo los unicos sp que tardaron mas de 2hs eran
aquellos que funcionaron con cursores.

Si nos pasaras ese SP seguro que te podriamos ayudar mejor :-)




Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida