Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Cachemiss

0 views
Skip to first unread message

Flamenco

unread,
Sep 14, 2006, 4:48:52 PM9/14/06
to
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!!!!!!


Isaias

unread,
Sep 14, 2006, 6:05:03 PM9/14/06
to
Nos podrias mostrar tu codigo?
--
Saludos
IIslas

Flamenco

unread,
Sep 14, 2006, 6:45:44 PM9/14/06
to
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,
--EstadoCot, DesEdoCotizacion, IdProg,
EstadoProg, DesEdoProgramacion, EdoDetalleProg,DescEdoDetalleProg,
--CASE CveTipServ WHEN 1 THEN IdServ WHEN 2 THEN IdServMat END
IdServicio,
----CASE WHEN CveTipServ = 1 THEN IdCert WHEN CveTipServ = 2
THEN IdCertMR END AS IdCert,
--CASE WHEN CveTipServ = 1 THEN NoCert WHEN CveTipServ = 2 THEN
NoCertMR END AS NoCert,
--CASE WHEN CveTipServ = 1 THEN Entregable WHEN
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" <Isa...@discussions.microsoft.com> escribió en el mensaje
news:E72CB8AD-EE51-46DD...@microsoft.com...

Isaias

unread,
Sep 14, 2006, 8:54:01 PM9/14/06
to
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

Alejandro Mesa

unread,
Sep 14, 2006, 9:56:01 PM9/14/06
to
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.com/en-us/library/ms676516.aspx


AMB

Flamenco

unread,
Sep 18, 2006, 4:19:52 PM9/18/06
to

Desde VB al solicitar con WITH RECOMPILE no se puede ejecutar la
instrucción, a menos que se aumente el tiempo de espera.

"Isaias" <Isa...@discussions.microsoft.com> escribió en el mensaje

news:A0730B59-C6BF-49EB...@microsoft.com...

Flamenco

unread,
Sep 18, 2006, 4:21:20 PM9/18/06
to
Hemos particionado el procedimiento almacenado y ahora si alcance el tiempo
(15 segundos) para obtener la consulta.

Gracias!


"Alejandro Mesa" <Alejan...@discussions.microsoft.com> escribió en el
mensaje news:EC6AEFCC-7F86-4E17...@microsoft.com...

0 new messages