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

#6 Pablo Suárez
30/03/2005 - 20:00 | Informe spam
Miguel,

Este tema lo investigué en varios lados y con un update es imposible
obtener algo como lo que necesito, que sería algo así:

partir de una tabla así:
libro autor
1 pedro
1 juan
2 juan
2 luis
2 enrique
3 claudio

y colocarlo en otra tabla de la siguiente forma:
libro autor
1 pedro, juan
2 juan, luis, enrique
3 claudio

Donde la cantidad de autores por libro no está limitada de antemano.

El tema de hacer mas eficiente el stored procedure (no tada dos horas,
sino que lo que tarda dos horas es una serie de SP que similares a este
de los cuales este es el que mas tarda) lo estoy analizando también. Mi
problema es en realidad como hacer para que este proceso se corra en
forma automática, sin que dé timeout. Hata ahora la única forma que no
dé tiemout ha sido ejecutándolo desde el analizador de consultas.

Saludos y muchas gracias!!

Pablo


Miguel Egea wrote:
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
#7 Maxi
30/03/2005 - 22:54 | Informe spam
Pablo, para que no de tiemout debes configurar en el cliente un tiempo mas
grande, el default es 20s


Salu2
Maxi


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

Este tema lo investigué en varios lados y con un update es imposible
obtener algo como lo que necesito, que sería algo así:

partir de una tabla así:
libro autor
1 pedro
1 juan
2 juan
2 luis 2 enrique
3 claudio

y colocarlo en otra tabla de la siguiente forma:
libro autor
1 pedro, juan
2 juan, luis, enrique
3 claudio

Donde la cantidad de autores por libro no está limitada de antemano.

El tema de hacer mas eficiente el stored procedure (no tada dos horas,
sino que lo que tarda dos horas es una serie de SP que similares a este de
los cuales este es el que mas tarda) lo estoy analizando también. Mi
problema es en realidad como hacer para que este proceso se corra en forma
automática, sin que dé timeout. Hata ahora la única forma que no dé
tiemout ha sido ejecutándolo desde el analizador de consultas.

Saludos y muchas gracias!!

Pablo


Miguel Egea wrote:
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
#8 Pablo Suárez
06/04/2005 - 18:56 | Informe spam
Si, ¿hay alguna manera de setear el timeout desde el script sql? para
volverlo al default al terminar el proceso.

Y, en el cliente, donde se configura el tiemout?

Gracias!!!

Maxi wrote:
Pablo, para que no de tiemout debes configurar en el cliente un tiempo mas
grande, el default es 20s

Respuesta Responder a este mensaje
#9 Maxi
06/04/2005 - 19:15 | Informe spam
Hola, solo debes configurarlo en el cliente. Deberas tener acceso al codigo
fuente de la aplicacion


Salu2
Maxi


"Pablo Suárez" escribió en el mensaje
news:
Si, ¿hay alguna manera de setear el timeout desde el script sql? para
volverlo al default al terminar el proceso.

Y, en el cliente, donde se configura el tiemout?

Gracias!!!

Maxi wrote:
Pablo, para que no de tiemout debes configurar en el cliente un tiempo
mas grande, el default es 20s

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