Hola, tengo unas consultas que funcionan correctamente en el analizador de
consultas, sin embargo cuando las añado a la base de datos en un
procedimiento almacenado, van mucho mas lentas.
Los planes de ejecución son diferentes tambien en el analizador de consultas
si ejecuto directamente el codigo del procedemiento que si llamo el
procedimiento con exe y los parametros, ademas de la diferencia en los
planes de ejecución, en los planes de ejecucion de llamada al procedimiento
con exec, los iconos tienen todos un circulo amarillo con unas flechas en
medio y aparacen uncos icnos de paralelismo que no habias visto nunca.
Estas son las llamadas que hago.
SET STATISTICS IO ON
DECLARE @CLIENTE VARCHAR(10)
SET @CLIENTE='4300000486'
// Esta es la llamada directa que va lenta.
EXEC DR_ELEPENCLIACU @CLIENTE
//Esta es la llamadirecta y el contenido del procedimiento almacenado es
identico.
SELECT MU.CODIGO,M.NOMBRE,P.PENDIENTE FROM (SELECT
L.CODIGO,SUM(PENDIDEVO) AS PENDIENTE FROM LICONTRATO L WHERE L.TIPO='M' AND
L.DEVUELTO='N' AND CLIENTE=@CLIENTE AND L.TIPOFAC IN ('L','S','F','M','H')
GROUP BY L.CODIGO) P
LEFT JOIN MAQUIUNI MU ON MU.REFERENCIA=P.CODIGO LEFT JOIN MAQUINA M ON
M.CODIGO=MU.CODIGO
SELECT P.CODIGO,MEDIO.NOMBRE,P.ALQUILADO,P.DEVUELTO,P.PENDIENTE FROM
(SELECT L.CODIGO,SUM(CANTIDAD) AS ALQUILADO,SUM(CANTIDEVO) AS
DEVUELTO,SUM(PENDIDEVO) AS PENDIENTE FROM LICONTRATO L WHERE L.TIPO='A' AND
L.DEVUELTO='N' AND CLIENTE=@CLIENTE AND L.TIPOFAC IN ('L','S','F','M','H')
GROUP BY L.CODIGO) P
LEFT JOIN MEDIO ON MEDIO.CODIGO=P.CODIGO
SELECT P.CODIGO,SERVICIO.NOMBRE,P.ALQUILADO,P.DEVUELTO,P.PENDIENTE FROM
(SELECT L.CODIGO,SUM(CANTIDAD) AS ALQUILADO,SUM(CANTIDEVO) AS
DEVUELTO,SUM(PENDIDEVO) AS PENDIENTE FROM LICONTRATO L WHERE L.TIPO='S' AND
L.DEVUELTO='N' AND CLIENTE=@CLIENTE AND L.TIPOFAC IN ('L','S','F','M','H')
GROUP BY L.CODIGO) P
LEFT JOIN SERVICIO ON SERVICIO.CODIGO=P.CODIGO
UNION ALL
SELECT L.CODIGO,L.TEXTO,CANTIDAD AS ALQUILADO,CANTIDEVO AS
DEVUELTO,PENDIDEVO AS PENDIENTE FROM LICONTRATO L WHERE L.TIPO='T' AND
L.DEVUELTO='N' AND CLIENTE=@CLIENTE AND L.TIPOFAC IN ('L','S','F','M','H')
Estos son los resultados del STATISTICS IO:
//La llamada al procedimiento almacenado:
Tabla 'LICONTRATO'. Número de exploraciones 2, lecturas lógicas 7642,
lecturas físicas 0, lecturas anticipadas 0.
Tabla 'MAQUIUNI'. Número de exploraciones 2, lecturas lógicas 16, lecturas
físicas 0, lecturas anticipadas 0.
Tabla 'MAQUINA'. Número de exploraciones 10, lecturas lógicas 20, lecturas
físicas 0, lecturas anticipadas 0.
Tabla 'LICONTRATO'. Número de exploraciones 2, lecturas lógicas 7642,
lecturas físicas 0, lecturas anticipadas 0.
Tabla 'MEDIO'. Número de exploraciones 10, lecturas lógicas 20, lecturas
físicas 0, lecturas anticipadas 0.
Tabla 'LICONTRATO'. Número de exploraciones 4, lecturas lógicas 15284,
lecturas físicas 0, lecturas anticipadas 0.
Tabla 'MEDIO'. Número de exploraciones 0, lecturas lógicas 0, lecturas
físicas 0, lecturas anticipadas 0.
//La ejecucion directa de la sentencia
Tabla 'MAQUINA'. Número de exploraciones 10, lecturas lógicas 20, lecturas
físicas 0, lecturas anticipadas 0.
Tabla 'MAQUIUNI'. Número de exploraciones 10, lecturas lógicas 20, lecturas
físicas 0, lecturas anticipadas 0.
Tabla 'LICONTRATO'. Número de exploraciones 1, lecturas lógicas 65, lecturas
físicas 0, lecturas anticipadas 0.
Tabla 'MEDIO'. Número de exploraciones 10, lecturas lógicas 20, lecturas
físicas 0, lecturas anticipadas 0.
Tabla 'LICONTRATO'. Número de exploraciones 1, lecturas lógicas 149,
lecturas físicas 0, lecturas anticipadas 0.
Tabla 'LICONTRATO'. Número de exploraciones 2, lecturas lógicas 107,
lecturas físicas 0, lecturas anticipadas 0.
Tabla 'SERVICIO'. Número de exploraciones 0, lecturas lógicas 0, lecturas
físicas 0, lecturas anticipadas 0.
Sabeis alguien que puede estar pasando?, todo esto es en el mismor servidor
y la misma base de datos.
Saludos.
Leer las respuestas