Cachemiss

14/09/2006 - 22:48 por Flamenco | Informe spam
Buen día!

Tengo un procedimiento almacenado que da como resultado una selección de
varias vistas. Cuando lo ejecuto desde el Analizador de Consultas se
ejecuta correctamente. Pero al hacerlo desde Visual Basic con OLEDB y ADO
consume el tiempo de espera (hasta 3 minuto). Al hacer la traza se ve que
cuando se ejectua del Analizador de Consultas el plan de ejecución se
encuentra en el cahé y lo ejecuta. Pero cuando se ejecuta desde Visual
Basic no.

¿Alguna sugerencia?

Gracias!!!!!!

Preguntas similare

Leer las respuestas

#1 Isaias
15/09/2006 - 00:05 | Informe spam
Nos podrias mostrar tu codigo?
Saludos
IIslas


"Flamenco" wrote:

Buen día!

Tengo un procedimiento almacenado que da como resultado una selección de
varias vistas. Cuando lo ejecuto desde el Analizador de Consultas se
ejecuta correctamente. Pero al hacerlo desde Visual Basic con OLEDB y ADO
consume el tiempo de espera (hasta 3 minuto). Al hacer la traza se ve que
cuando se ejectua del Analizador de Consultas el plan de ejecución se
encuentra en el cahé y lo ejecuta. Pero cuando se ejecuta desde Visual
Basic no.

¿Alguna sugerencia?

Gracias!!!!!!



Respuesta Responder a este mensaje
#2 Flamenco
15/09/2006 - 00:45 | Informe spam
Claro!

Para el procedimeinto almacenado T-SQL:
CREATE PROCEDURE SCSAdmin.PaSolAMiDivServInt
@Areas as varchar(500) = null,
@Division as integer=null,
@OpcionConsulta AS Integer = Null
AS
BEGIN
IF @OpcionConsulta = 1
SELECT IdSol, PSol, FechaRecSol, FechaLimiteSol, LaboratorioSol,
AreaS, NombreAreaSol,NombreRepresentante,
AreaO, NombreAreaOfe,
Fecha_Contestacion, DescServSol, DescServCot, ObservacionesSolAcep,
CASE CveTipServ WHEN 1 THEN Equipo WHEN 2 THEN NMR END AS
EquipoONMR,
Marca, Modelo, No_serie,Presentacion, Parametros,
Cantidad, CveTipServ, DescripcionTipServ, EstadoSol, DesEdoSolicitud,
EdoSolPorAtender, DescEdoSolPorAtender,-- IdCoti,
EstadoProg, DesEdoProgramacion, EdoDetalleProg,DescEdoDetalleProg,
IdServicio,
-CASE WHEN CveTipServ = 1 THEN IdCert WHEN CveTipServ = 2
THEN IdCertMR END AS IdCert,
NoCertMR END AS NoCert,
CveTipServ = 2 THEN EntregableMR END AS FechaEntregaCert
IdRep, IdCte
FROM SCSAdmin.vConGralServInt2
WHERE (AreaO IN (SELECT * FROM SCSADMIN.LISTA(@Areas,',')) OR
@Areas is null)
and (SCSAdmin.vConGralServInt2.FechaRecSol >=
CONVERT(DATETIME, '2005-01-01 00:00:00', 102))
and (AreaS <> AreaO) and (EstadoSol='AS')
ORDER BY IdSol DESC
IF @OpcionConsulta =2
SELECT IdSol, PSol, FechaRecSol, FechaLimiteSol, LaboratorioSol,
AreaS, ...
...
IF @OpcionConsulta = 11
SELECT ...
END


Si lo invoco desde el Analizador de consultas:-
EXECUTE SCSAdmin.PaSolAMiDivServInt 1,730
Ejecuta el procedimiento. Lo encuentra en el Cache y lo hace
inmediatamente.

Si lo invoco desde Visual Basic-

Dim mRsPendientesMismaDivision As New ADODB.Recordset 'RecordSet
para la consulta general de solicitudes interna de la misma división
mRsPendientesEnviadosAMiDivision.CursorLocation = adUseClient
mRsPendientesEnviadosAMiDivision.Open "Execute
SCSAdmin.PaSolAMiDivServInt 1,730", gConnection, adOpenKeyset,
adLockOptimistic
Trata de ejecutar el procedimiento almacenado. Lo busca el plan de
ejecución en el Cache, no lo encuentra, trata de regenerar el plan de
ejecución y se tarda más de tres minutos. Si logrará generar el nuevo plan
de ejecución y se repite la consulta vuelve a generar el plan de ejecución.










"Isaias" escribió en el mensaje
news:
Nos podrias mostrar tu codigo?
Saludos
IIslas


"Flamenco" wrote:

Buen día!

Tengo un procedimiento almacenado que da como resultado una selección de
varias vistas. Cuando lo ejecuto desde el Analizador de Consultas se
ejecuta correctamente. Pero al hacerlo desde Visual Basic con OLEDB y
ADO
consume el tiempo de espera (hasta 3 minuto). Al hacer la traza se ve
que
cuando se ejectua del Analizador de Consultas el plan de ejecución se
encuentra en el cahé y lo ejecuta. Pero cuando se ejecuta desde Visual
Basic no.

¿Alguna sugerencia?

Gracias!!!!!!



Respuesta Responder a este mensaje
#3 Isaias
15/09/2006 - 02:54 | Informe spam
Podrias incrementarle al final de los parametros WITH RECOMPILE, cuando lo
mandas a ejecutar desde tu VB.

Y decirnos si se tarda igual del tiempo
Saludos
IIslas


"Flamenco" wrote:

Claro!

Para el procedimeinto almacenado T-SQL:
CREATE PROCEDURE SCSAdmin.PaSolAMiDivServInt
@Areas as varchar(500) = null,
@Division as integer=null,
@OpcionConsulta AS Integer = Null
AS
BEGIN
IF @OpcionConsulta = 1
SELECT IdSol, PSol, FechaRecSol, FechaLimiteSol, LaboratorioSol,
AreaS, NombreAreaSol,NombreRepresentante,
AreaO, NombreAreaOfe,
Fecha_Contestacion, DescServSol, DescServCot, ObservacionesSolAcep,
CASE CveTipServ WHEN 1 THEN Equipo WHEN 2 THEN NMR END AS
EquipoONMR,
Marca, Modelo, No_serie,Presentacion, Parametros,
Cantidad, CveTipServ, DescripcionTipServ, EstadoSol, DesEdoSolicitud,
EdoSolPorAtender, DescEdoSolPorAtender,-- IdCoti,
EstadoProg, DesEdoProgramacion, EdoDetalleProg,DescEdoDetalleProg,
IdServicio,
-CASE WHEN CveTipServ = 1 THEN IdCert WHEN CveTipServ = 2
THEN IdCertMR END AS IdCert,
NoCertMR END AS NoCert,
CveTipServ = 2 THEN EntregableMR END AS FechaEntregaCert
IdRep, IdCte
FROM SCSAdmin.vConGralServInt2
WHERE (AreaO IN (SELECT * FROM SCSADMIN.LISTA(@Areas,',')) OR
@Areas is null)
and (SCSAdmin.vConGralServInt2.FechaRecSol >=
CONVERT(DATETIME, '2005-01-01 00:00:00', 102))
and (AreaS <> AreaO) and (EstadoSol='AS')
ORDER BY IdSol DESC
IF @OpcionConsulta =2
SELECT IdSol, PSol, FechaRecSol, FechaLimiteSol, LaboratorioSol,
AreaS, ...
...
IF @OpcionConsulta = 11
SELECT ...
END


Si lo invoco desde el Analizador de consultas:-
EXECUTE SCSAdmin.PaSolAMiDivServInt 1,730
Ejecuta el procedimiento. Lo encuentra en el Cache y lo hace
inmediatamente.

Si lo invoco desde Visual Basic-

Dim mRsPendientesMismaDivision As New ADODB.Recordset 'RecordSet
para la consulta general de solicitudes interna de la misma división
mRsPendientesEnviadosAMiDivision.CursorLocation = adUseClient
mRsPendientesEnviadosAMiDivision.Open "Execute
SCSAdmin.PaSolAMiDivServInt 1,730", gConnection, adOpenKeyset,
adLockOptimistic
Trata de ejecutar el procedimiento almacenado. Lo busca el plan de
ejecución en el Cache, no lo encuentra, trata de regenerar el plan de
ejecución y se tarda más de tres minutos. Si logrará generar el nuevo plan
de ejecución y se repite la consulta vuelve a generar el plan de ejecución.










"Isaias" escribió en el mensaje
news:
> Nos podrias mostrar tu codigo?
> Saludos
> IIslas
>
>
> "Flamenco" wrote:
>
>> Buen día!
>>
>> Tengo un procedimiento almacenado que da como resultado una selección de
>> varias vistas. Cuando lo ejecuto desde el Analizador de Consultas se
>> ejecuta correctamente. Pero al hacerlo desde Visual Basic con OLEDB y
>> ADO
>> consume el tiempo de espera (hasta 3 minuto). Al hacer la traza se ve
>> que
>> cuando se ejectua del Analizador de Consultas el plan de ejecución se
>> encuentra en el cahé y lo ejecuta. Pero cuando se ejecuta desde Visual
>> Basic no.
>>
>> ¿Alguna sugerencia?
>>
>> Gracias!!!!!!
>>
>>
>>



Respuesta Responder a este mensaje
#4 Alejandro Mesa
15/09/2006 - 03:56 | Informe spam
Flamenco,

Vamos por parte.

1 - Lo primero que haria es particionar un poco ese procedimiento, para
hacerlo un poco mas legible, menos complicado para SQL Server y hasta para
otro propgramador que tenga que meter sus manos. Crea multiples
procedimientos, uno por cada caso.

...
IF @OpcionConsulta = 1
begin
exec dbo.p1 @p1, ..., @pn
...
end

IF @OpcionConsulta = 2
begin
exec dbo.p2 @p1, ..., @pn
...
end
...


2 - Ejecuta el procedimineto desde vb usando el objeto command

Calling a Stored Procedure with a Command
http://windowssdk.msdn.microsoft.co...76516.aspx


AMB

"Flamenco" wrote:

Claro!

Para el procedimeinto almacenado T-SQL:
CREATE PROCEDURE SCSAdmin.PaSolAMiDivServInt
@Areas as varchar(500) = null,
@Division as integer=null,
@OpcionConsulta AS Integer = Null
AS
BEGIN
IF @OpcionConsulta = 1
SELECT IdSol, PSol, FechaRecSol, FechaLimiteSol, LaboratorioSol,
AreaS, NombreAreaSol,NombreRepresentante,
AreaO, NombreAreaOfe,
Fecha_Contestacion, DescServSol, DescServCot, ObservacionesSolAcep,
CASE CveTipServ WHEN 1 THEN Equipo WHEN 2 THEN NMR END AS
EquipoONMR,
Marca, Modelo, No_serie,Presentacion, Parametros,
Cantidad, CveTipServ, DescripcionTipServ, EstadoSol, DesEdoSolicitud,
EdoSolPorAtender, DescEdoSolPorAtender,-- IdCoti,
EstadoProg, DesEdoProgramacion, EdoDetalleProg,DescEdoDetalleProg,
IdServicio,
-CASE WHEN CveTipServ = 1 THEN IdCert WHEN CveTipServ = 2
THEN IdCertMR END AS IdCert,
NoCertMR END AS NoCert,
CveTipServ = 2 THEN EntregableMR END AS FechaEntregaCert
IdRep, IdCte
FROM SCSAdmin.vConGralServInt2
WHERE (AreaO IN (SELECT * FROM SCSADMIN.LISTA(@Areas,',')) OR
@Areas is null)
and (SCSAdmin.vConGralServInt2.FechaRecSol >=
CONVERT(DATETIME, '2005-01-01 00:00:00', 102))
and (AreaS <> AreaO) and (EstadoSol='AS')
ORDER BY IdSol DESC
IF @OpcionConsulta =2
SELECT IdSol, PSol, FechaRecSol, FechaLimiteSol, LaboratorioSol,
AreaS, ...
...
IF @OpcionConsulta = 11
SELECT ...
END


Si lo invoco desde el Analizador de consultas:-
EXECUTE SCSAdmin.PaSolAMiDivServInt 1,730
Ejecuta el procedimiento. Lo encuentra en el Cache y lo hace
inmediatamente.

Si lo invoco desde Visual Basic-

Dim mRsPendientesMismaDivision As New ADODB.Recordset 'RecordSet
para la consulta general de solicitudes interna de la misma división
mRsPendientesEnviadosAMiDivision.CursorLocation = adUseClient
mRsPendientesEnviadosAMiDivision.Open "Execute
SCSAdmin.PaSolAMiDivServInt 1,730", gConnection, adOpenKeyset,
adLockOptimistic
Trata de ejecutar el procedimiento almacenado. Lo busca el plan de
ejecución en el Cache, no lo encuentra, trata de regenerar el plan de
ejecución y se tarda más de tres minutos. Si logrará generar el nuevo plan
de ejecución y se repite la consulta vuelve a generar el plan de ejecución.










"Isaias" escribió en el mensaje
news:
> Nos podrias mostrar tu codigo?
> Saludos
> IIslas
>
>
> "Flamenco" wrote:
>
>> Buen día!
>>
>> Tengo un procedimiento almacenado que da como resultado una selección de
>> varias vistas. Cuando lo ejecuto desde el Analizador de Consultas se
>> ejecuta correctamente. Pero al hacerlo desde Visual Basic con OLEDB y
>> ADO
>> consume el tiempo de espera (hasta 3 minuto). Al hacer la traza se ve
>> que
>> cuando se ejectua del Analizador de Consultas el plan de ejecución se
>> encuentra en el cahé y lo ejecuta. Pero cuando se ejecuta desde Visual
>> Basic no.
>>
>> ¿Alguna sugerencia?
>>
>> Gracias!!!!!!
>>
>>
>>



Respuesta Responder a este mensaje
#5 Flamenco
18/09/2006 - 22:19 | Informe spam
Desde VB al solicitar con WITH RECOMPILE no se puede ejecutar la
instrucción, a menos que se aumente el tiempo de espera.





"Isaias" escribió en el mensaje
news:
Podrias incrementarle al final de los parametros WITH RECOMPILE, cuando lo
mandas a ejecutar desde tu VB.

Y decirnos si se tarda igual del tiempo
Saludos
IIslas


"Flamenco" wrote:

Claro!

Para el procedimeinto almacenado T-SQL:
CREATE PROCEDURE SCSAdmin.PaSolAMiDivServInt
@Areas as varchar(500) = null,
@Division as integer=null,
@OpcionConsulta AS Integer = Null
AS
BEGIN
IF @OpcionConsulta = 1
SELECT IdSol, PSol, FechaRecSol, FechaLimiteSol,
LaboratorioSol,
AreaS, NombreAreaSol,NombreRepresentante,
AreaO, NombreAreaOfe,
Fecha_Contestacion, DescServSol, DescServCot, ObservacionesSolAcep,
CASE CveTipServ WHEN 1 THEN Equipo WHEN 2 THEN NMR END AS
EquipoONMR,
Marca, Modelo, No_serie,Presentacion, Parametros,
Cantidad, CveTipServ, DescripcionTipServ, EstadoSol, DesEdoSolicitud,
EdoSolPorAtender, DescEdoSolPorAtender,-- IdCoti,
IdProg,
EstadoProg, DesEdoProgramacion, EdoDetalleProg,DescEdoDetalleProg,
IdServicio,
-CASE WHEN CveTipServ = 1 THEN IdCert WHEN CveTipServ = 2
THEN IdCertMR END AS IdCert,
THEN
NoCertMR END AS NoCert,
CveTipServ = 2 THEN EntregableMR END AS FechaEntregaCert
IdRep, IdCte
FROM SCSAdmin.vConGralServInt2
WHERE (AreaO IN (SELECT * FROM SCSADMIN.LISTA(@Areas,',')) OR
@Areas is null)
and (SCSAdmin.vConGralServInt2.FechaRecSol >>> CONVERT(DATETIME, '2005-01-01 00:00:00', 102))
and (AreaS <> AreaO) and (EstadoSol='AS')
ORDER BY IdSol DESC
IF @OpcionConsulta =2
SELECT IdSol, PSol, FechaRecSol, FechaLimiteSol,
LaboratorioSol,
AreaS, ...
...
IF @OpcionConsulta = 11
SELECT ...
END


Si lo invoco desde el Analizador de consultas:-
EXECUTE SCSAdmin.PaSolAMiDivServInt 1,730
Ejecuta el procedimiento. Lo encuentra en el Cache y lo hace
inmediatamente.

Si lo invoco desde Visual Basic-

Dim mRsPendientesMismaDivision As New ADODB.Recordset 'RecordSet
para la consulta general de solicitudes interna de la misma división
mRsPendientesEnviadosAMiDivision.CursorLocation = adUseClient
mRsPendientesEnviadosAMiDivision.Open "Execute
SCSAdmin.PaSolAMiDivServInt 1,730", gConnection, adOpenKeyset,
adLockOptimistic
Trata de ejecutar el procedimiento almacenado. Lo busca el plan de
ejecución en el Cache, no lo encuentra, trata de regenerar el plan de
ejecución y se tarda más de tres minutos. Si logrará generar el nuevo
plan
de ejecución y se repite la consulta vuelve a generar el plan de
ejecución.










"Isaias" escribió en el mensaje
news:
> Nos podrias mostrar tu codigo?
> Saludos
> IIslas
>
>
> "Flamenco" wrote:
>
>> Buen día!
>>
>> Tengo un procedimiento almacenado que da como resultado una selección
>> de
>> varias vistas. Cuando lo ejecuto desde el Analizador de Consultas se
>> ejecuta correctamente. Pero al hacerlo desde Visual Basic con OLEDB y
>> ADO
>> consume el tiempo de espera (hasta 3 minuto). Al hacer la traza se ve
>> que
>> cuando se ejectua del Analizador de Consultas el plan de ejecución se
>> encuentra en el cahé y lo ejecuta. Pero cuando se ejecuta desde
>> Visual
>> Basic no.
>>
>> ¿Alguna sugerencia?
>>
>> Gracias!!!!!!
>>
>>
>>



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