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.

Preguntas similare

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.


Respuesta Responder a este mensaje
#2 José Antonio
20/09/2005 - 07:06 | Informe spam
Tengo instalado el servipack 4, y creo que si estan actualizadas las
estadisticas.

En todo caso ¿como las actualizaria? para probar si es ese el problema.

voy a probar a separar los querys y te digo que es lo que pasa.


"Maxi" escribió en el mensaje
news:eZG2q$
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.






Respuesta Responder a este mensaje
#3 José Antonio
20/09/2005 - 13:49 | Informe spam
He probado a realizar solo el primer query y tengo el mismo problema.

¿Qhe significan en el pla de ejecucion los circulos amarillos en medio de
los iconos y los iconos de paralelismo?


Saludos.
"Maxi" escribió en el mensaje
news:eZG2q$
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.






Respuesta Responder a este mensaje
#4 Maxi
20/09/2005 - 14:36 | Informe spam
Hola, a ver, solo deja un solo query en el SP y compilalo. Luego ejecutalo y
mostrame el plan de ejecucion (pasamelo en formato texto) al igual que el
mismo query fuera del Sp's (armate un archivo .txt para la data)

Tenes alguna maquina con sp3a?


Salu2
Maxi


"José Antonio" escribió en el
mensaje news:
Tengo instalado el servipack 4, y creo que si estan actualizadas las
estadisticas.

En todo caso ¿como las actualizaria? para probar si es ese el problema.

voy a probar a separar los querys y te digo que es lo que pasa.


"Maxi" escribió en el mensaje
news:eZG2q$
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.










Respuesta Responder a este mensaje
#5 Jose Antonio
21/09/2005 - 11:34 | Informe spam
Como puedo pasar el plan de ejecucion a modo texto?

"Maxi" escribió en el mensaje
news:%
Hola, a ver, solo deja un solo query en el SP y compilalo. Luego ejecutalo
y mostrame el plan de ejecucion (pasamelo en formato texto) al igual que
el mismo query fuera del Sp's (armate un archivo .txt para la data)

Tenes alguna maquina con sp3a?


Salu2
Maxi


"José Antonio" escribió en el
mensaje news:
Tengo instalado el servipack 4, y creo que si estan actualizadas las
estadisticas.

En todo caso ¿como las actualizaria? para probar si es ese el problema.

voy a probar a separar los querys y te digo que es lo que pasa.


"Maxi" escribió en el mensaje
news:eZG2q$
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.














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