Diferecia de rendimiento en el analizador de consultas y un procedimiento almacenado.

19/09/2005 - 10:24 por José Antonio | Informe spam
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

#1 Maxi
20/09/2005 - 01:14 | Informe spam
Hola, que vsersion de service pack tienes? y ademas, las estadisticas las
tienes actualizadas?

El sp's tiene los 3 querys juntos? podes probar de separarlos uno por sp?


-

"José Antonio" escribió en el
mensaje news:
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.


Preguntas similares