Problemas consultando

02/01/2004 - 10:09 por Vicent | Informe spam
Hola a todos

Me ha surgido un tema recientemente que no logro resolver. Al ejecutar
unas funciones definidas por usuario que tengo creadas desde un proyecto
.ADP en Access, a los pocos segundos de disparar la ejecución obtengo el
mensaje "Terminó el tiempo de espera". La BD no es que sea excesivamente
grande (1,5 GB) y según he podido ver el servidor va muy bien de recursos.
Tampoco es que haya cambiado nada del SQL Server.

¿Alguien tiene ideas?

Saludos

Preguntas similare

Leer las respuestas

#1 Eladio Rincón
02/01/2004 - 11:48 | Informe spam
Hola,

cuando haces la llamada a la UDF prueba desde el analizador de consultas a comprobar si hay algún tipo de bloqueo que no le permita a la UDF devolver su resultado; comprueba los bloqueos con sp_lock o leyendo de sysprocesses:
sp_lock

select * from master..sysprocesses where blocked <>0

si no te importa, postea el código de la UDF para ver que hace por si se puede mejorar ...

Saludos,

Eladio Rincón
MCAD, SQL Server MVP
http://www.siquelnet.com

"Comparte lo que sabes, aprende lo que no sepas." FGG

"Vicent" escribió en el mensaje news:UyaJb.2342824$

Hola a todos

Me ha surgido un tema recientemente que no logro resolver. Al ejecutar
unas funciones definidas por usuario que tengo creadas desde un proyecto
.ADP en Access, a los pocos segundos de disparar la ejecución obtengo el
mensaje "Terminó el tiempo de espera". La BD no es que sea excesivamente
grande (1,5 GB) y según he podido ver el servidor va muy bien de recursos.
Tampoco es que haya cambiado nada del SQL Server.

¿Alguien tiene ideas?

Saludos


Respuesta Responder a este mensaje
#2 Vicent
02/01/2004 - 13:26 | Informe spam
cuando haces la llamada a la UDF prueba desde el analizador de consultas a


comprobar
si hay algún tipo de bloqueo que no le permita a la UDF devolver su


resultado; comprueba
los bloqueos con sp_lock o leyendo de sysprocesses: sp_lock

select * from master..sysprocesses where blocked <>0



He probado esto que propones pero no parece haber ningún problema.


si no te importa, postea el código de la UDF para ver que hace por si se


puede mejorar ...

Aquí tienes el código completo:

SELECT TOP 100 PERCENT COUNT(*) AS Descargas, dbo.[Nombres
cortos].Descripcion AS Fichero
FROM dbo.Intranet INNER JOIN
dbo.[Nombres cortos] ON dbo.Intranet.target dbo.[Nombres cortos].NombreCorto
WHERE (dbo.Intranet.target LIKE '%.pdf%' OR
dbo.Intranet.target LIKE '%.xls%' OR
dbo.Intranet.target LIKE '%.doc%' OR
dbo.Intranet.target LIKE '%.dot%' OR
dbo.Intranet.target LIKE '%.ppt%' OR
dbo.Intranet.target LIKE '%.zip%') AND
(dbo.Intranet.LogTime BETWEEN CONVERT(datetime, '01/12/2003') AND
CONVERT(datetime, '31/12/2003'))
GROUP BY dbo.[Nombres cortos].Descripcion
ORDER BY COUNT(*) DESC

Además, he observado que la ejecución desde el analizador de consultas
funciona correctamente, sólo falla desde Access.

Saludos
Respuesta Responder a este mensaje
#3 Eladio Rincón
02/01/2004 - 14:08 | Informe spam
Hola,

podrías comprobar si desde el proyecto ADP puedes ejecutar la consulta que hace la UDF?

necesitaría la definición de las tablas Intranet y Nombres Cortos (columnas, fks, indices), registros que tiene, y si es posible intenta capturar con SQL Server Profiler la llamada que realizas desde el ADP a la función

Gracias,

Eladio Rincón
MCAD, SQL Server MVP
http://www.siquelnet.com

"Comparte lo que sabes, aprende lo que no sepas." FGG

"Vicent" escribió en el mensaje news:NrdJb.2345703$

> cuando haces la llamada a la UDF prueba desde el analizador de consultas a
comprobar
> si hay algún tipo de bloqueo que no le permita a la UDF devolver su
resultado; comprueba
> los bloqueos con sp_lock o leyendo de sysprocesses: sp_lock
>
> select * from master..sysprocesses where blocked <>0

He probado esto que propones pero no parece haber ningún problema.


> si no te importa, postea el código de la UDF para ver que hace por si se
puede mejorar ...

Aquí tienes el código completo:

SELECT TOP 100 PERCENT COUNT(*) AS Descargas, dbo.[Nombres
cortos].Descripcion AS Fichero
FROM dbo.Intranet INNER JOIN
dbo.[Nombres cortos] ON dbo.Intranet.target > dbo.[Nombres cortos].NombreCorto
WHERE (dbo.Intranet.target LIKE '%.pdf%' OR
dbo.Intranet.target LIKE '%.xls%' OR
dbo.Intranet.target LIKE '%.doc%' OR
dbo.Intranet.target LIKE '%.dot%' OR
dbo.Intranet.target LIKE '%.ppt%' OR
dbo.Intranet.target LIKE '%.zip%') AND
(dbo.Intranet.LogTime BETWEEN CONVERT(datetime, '01/12/2003') AND
CONVERT(datetime, '31/12/2003'))
GROUP BY dbo.[Nombres cortos].Descripcion
ORDER BY COUNT(*) DESC

Además, he observado que la ejecución desde el analizador de consultas
funciona correctamente, sólo falla desde Access.

Saludos


Respuesta Responder a este mensaje
#4 Vicent
02/01/2004 - 14:57 | Informe spam
podrías comprobar si desde el proyecto ADP puedes ejecutar la consulta que


hace la UDF?

Sí, efectivamente lo he probado y si reduzco el intervalo de fechas saca
la información pero si pongo el mes entero da el mensaje de "Terminó el
tiempo de espera" (hasta el mes pasado funcionaba).

necesitaría la definición de las tablas Intranet y Nombres Cortos


(columnas, fks, indices),
registros que tiene, y si es posible intenta capturar con SQL Server


Profiler la llamada
que realizas desde el ADP a la función



Intranet: (Alrededor de 200.000 registros)


ClientHost nvarchar 255 1
username nvarchar 255 1
LogTime datetime 8 1
service nvarchar 255 1
machine nvarchar 255 1
serverip nvarchar 50 1
processingtime int 4 1
bytesrecvd int 4 1
bytessent int 4 1
servicestatus int 4 1
win32status int 4 1
operation nvarchar 255 1
target nvarchar 255 1
parameters nvarchar 255 1

Nombres cortos: (alrededor de 500 registros)


NombreCorto nvarchar 255
Descripcion nvarchar 100

La llamada no la adjunto puesto que soy bastante inexperto en SQL Server
y no conozco la herramienta lo suficiente.

Saludos
Respuesta Responder a este mensaje
#5 Maximiliano Damian Accotto
02/01/2004 - 18:30 | Informe spam
Hola,

los timeout son propiedades de tu aplicacion, por ej si tu aplicacion esta
desarrollada en VB en tu control ADO tienes la propiedad timeout, te
recomiendo que aumentes ese valor a por lo menos 120 segundos.

De todas formas cuando pasa esto lo aconsejable es primero ir a nuestro
analizador de consultas y ver cuanto tarda ahi.

Tambien podes estudiar la inclusion de indices (esto mismo lo podrias hasta
hacer con el asistente de tu Analizador de Consultas)

Si en tu analizador de consultas tarda suponete unox 3 seg (no desde el
Servidor) y en tu aplicacion unos 30 deberias no solo revisar los timeout
sino la forma que te estas conectando (por ej cursores de servidor o
Cursores del cliente o que tipo de Dataset (tipificados o no) has usado)

El timeout tambien se puede ver afectado por latencia en tu red (esto es mas
dificil de solucionar y este no es el foro en el cual deberias consultarlo)

Bueno espero haberte ayudado lo suficiente.

Salu2

Maximiliano Damian Accotto


"Vicent" escribió en el mensaje
news:UyaJb.2342824$

Hola a todos

Me ha surgido un tema recientemente que no logro resolver. Al ejecutar
unas funciones definidas por usuario que tengo creadas desde un proyecto
.ADP en Access, a los pocos segundos de disparar la ejecución obtengo el
mensaje "Terminó el tiempo de espera". La BD no es que sea excesivamente
grande (1,5 GB) y según he podido ver el servidor va muy bien de recursos.
Tampoco es que haya cambiado nada del SQL Server.

¿Alguien tiene ideas?

Saludos


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