Tiempos de ejecución de update

23/02/2007 - 16:31 por Arnauri | Informe spam
Hola a todos:
Tengo una UPDATE bastante compleja que trata un montón de datos. Si la
ejecuto desde el analizador de consultas tarda unos 8 segundos en ejecutarse.
Si introduzco esta UPDATE en un procedimiento almacenado y lo ejecuto, tarda
en ejecutarse casi 5 minutos. He hecho mil pruebas y no he conseguido
averiguar nada. ¿A alguien se le ocurre a que se puede deber esta diferencia
tan grande?

Un saludo y gracias por adelantado.

Preguntas similare

Leer las respuestas

#1 Maxi
23/02/2007 - 16:50 | Informe spam
Hola, necesitaerias mas informacion al respecto, lo primero seria

1) Version de SQLserver y service pack
2) Planes de ejecuion de cada uno de ellos
3) si es posible el codigo del update

"Arnauri" escribió en el mensaje
news:
Hola a todos:
Tengo una UPDATE bastante compleja que trata un montón de datos. Si la
ejecuto desde el analizador de consultas tarda unos 8 segundos en
ejecutarse.
Si introduzco esta UPDATE en un procedimiento almacenado y lo ejecuto,
tarda
en ejecutarse casi 5 minutos. He hecho mil pruebas y no he conseguido
averiguar nada. ¿A alguien se le ocurre a que se puede deber esta
diferencia
tan grande?

Un saludo y gracias por adelantado.
Respuesta Responder a este mensaje
#2 Alejandro Mesa
23/02/2007 - 16:51 | Informe spam
Arnauri,

Que tal si nos muestras un poco de informacion como DDL y el sentencia que
estas usando?


AMB

"Arnauri" wrote:

Hola a todos:
Tengo una UPDATE bastante compleja que trata un montón de datos. Si la
ejecuto desde el analizador de consultas tarda unos 8 segundos en ejecutarse.
Si introduzco esta UPDATE en un procedimiento almacenado y lo ejecuto, tarda
en ejecutarse casi 5 minutos. He hecho mil pruebas y no he conseguido
averiguar nada. ¿A alguien se le ocurre a que se puede deber esta diferencia
tan grande?

Un saludo y gracias por adelantado.
Respuesta Responder a este mensaje
#3 Arnauri
23/02/2007 - 17:03 | Informe spam
A ver si esto te da una pista:

UPDATE CalculosStock
SET cantidadB=cantidad
FROM CalculosStock
INNER JOIN
(SELECT CalculosStock.id_articulo, CalculosStock.medida, ISNULL(COUNT(*),
0) AS cantidad
FROM CalculosStock
INNER JOIN
(SELECT articulos.cod_articulo AS id_articulo, PLA_PistasLineas.medida,
CPR_Parque.fecha
FROM PLA_PistasLineas
INNER JOIN lineasPedidos
ON
PLA_PistasLineas.id_linea_pedido_general=lineasPedidos.id_linea_pedido_general
INNER JOIN articulos
ON lineasPedidos.id_articulo = articulos.id_articulo
INNER JOIN PLA_Pistas
ON PLA_PistasLineas.id_planificacion=PLA_Pistas.id_planificacion
INNER JOIN CPR_Parque
ON PLA_Pistas.cod_ordenproduccion = CPR_Parque.cod_ordenproduccion
WHERE situacion='TER'
AND CPR_Parque.fecha>='03/06/06'
) AS ttemp
ON CalculosStock.id_articulo= ttemp.id_articulo
AND CalculosStock.medida= ttemp.medida
AND CalculosStock.fecha <= ttemp.fecha
GROUP BY CalculosStock.id_articulo, CalculosStock.medida) as tttemp
ON CalculosStock.id_articulo=tttemp.id_articulo
AND CalculosStock.medida=tttemp.medida

Estoy usando SQLServer 2000.

Un saludo




"Maxi" wrote:

Hola, necesitaerias mas informacion al respecto, lo primero seria

1) Version de SQLserver y service pack
2) Planes de ejecuion de cada uno de ellos
3) si es posible el codigo del update

"Arnauri" escribió en el mensaje
news:
> Hola a todos:
> Tengo una UPDATE bastante compleja que trata un montón de datos. Si la
> ejecuto desde el analizador de consultas tarda unos 8 segundos en
> ejecutarse.
> Si introduzco esta UPDATE en un procedimiento almacenado y lo ejecuto,
> tarda
> en ejecutarse casi 5 minutos. He hecho mil pruebas y no he conseguido
> averiguar nada. ¿A alguien se le ocurre a que se puede deber esta
> diferencia
> tan grande?
>
> Un saludo y gracias por adelantado.



Respuesta Responder a este mensaje
#4 Maxi
23/02/2007 - 17:09 | Informe spam
Hola, pasame tambien el store y los planes de ejecucion de ambos

"Arnauri" escribió en el mensaje
news:
A ver si esto te da una pista:

UPDATE CalculosStock
SET cantidadB=cantidad
FROM CalculosStock
INNER JOIN
(SELECT CalculosStock.id_articulo, CalculosStock.medida, ISNULL(COUNT(*),
0) AS cantidad
FROM CalculosStock
INNER JOIN
(SELECT articulos.cod_articulo AS id_articulo, PLA_PistasLineas.medida,
CPR_Parque.fecha
FROM PLA_PistasLineas
INNER JOIN lineasPedidos
ON
PLA_PistasLineas.id_linea_pedido_general=lineasPedidos.id_linea_pedido_general
INNER JOIN articulos
ON lineasPedidos.id_articulo = articulos.id_articulo
INNER JOIN PLA_Pistas
ON PLA_PistasLineas.id_planificacion=PLA_Pistas.id_planificacion
INNER JOIN CPR_Parque
ON PLA_Pistas.cod_ordenproduccion = CPR_Parque.cod_ordenproduccion
WHERE situacion='TER'
AND CPR_Parque.fecha>='03/06/06'
) AS ttemp
ON CalculosStock.id_articulo= ttemp.id_articulo
AND CalculosStock.medida= ttemp.medida
AND CalculosStock.fecha <= ttemp.fecha
GROUP BY CalculosStock.id_articulo, CalculosStock.medida) as tttemp
ON CalculosStock.id_articulo=tttemp.id_articulo
AND CalculosStock.medida=tttemp.medida

Estoy usando SQLServer 2000.

Un saludo




"Maxi" wrote:

Hola, necesitaerias mas informacion al respecto, lo primero seria

1) Version de SQLserver y service pack
2) Planes de ejecuion de cada uno de ellos
3) si es posible el codigo del update

"Arnauri" escribió en el mensaje
news:
> Hola a todos:
> Tengo una UPDATE bastante compleja que trata un montón de datos. Si la
> ejecuto desde el analizador de consultas tarda unos 8 segundos en
> ejecutarse.
> Si introduzco esta UPDATE en un procedimiento almacenado y lo ejecuto,
> tarda
> en ejecutarse casi 5 minutos. He hecho mil pruebas y no he conseguido
> averiguar nada. ¿A alguien se le ocurre a que se puede deber esta
> diferencia
> tan grande?
>
> Un saludo y gracias por adelantado.



Respuesta Responder a este mensaje
#5 Alejandro Mesa
23/02/2007 - 17:28 | Informe spam
Arnauri,

Disculpa que te diga esto, pero no estamos aqui para adivinar. Si de verdad
necesitas ayuda, entonces debes ser mas explicito en la informacion que
proporcionas. Puedes incluir la estructura de las tablas involucradas,
incluyendo indices y restricciones, quizas data de ejemplo (sentencias
insert) y resultados esperados. La ayuda debe ser mutua, no crees?

Prueba con la sgte sentencia, chequea si los resultados son los esperados.

UPDATE
dbo.CalculosStock
SET
cantidadB = isnull((
select
count(*)
from
dbo.PLA_PistasLineas
INNER JOIN
dbo.lineasPedidos
ON PLA_PistasLineas.id_linea_pedido_general =
lineasPedidos.id_linea_pedido_general
INNER JOIN
dbo.articulos
ON lineasPedidos.id_articulo = articulos.id_articulo
INNER JOIN
dbo.PLA_Pistas
ON PLA_PistasLineas.id_planificacion = PLA_Pistas.id_planificacion
INNER JOIN
dbo.CPR_Parque
ON PLA_Pistas.cod_ordenproduccion = CPR_Parque.cod_ordenproduccion
WHERE
situacion = 'TER'
AND CPR_Parque.fecha >= '03/06/06'
and articulos.cod_articulo = dbo.CalculosStock.id_articulo
AND PLA_PistasLineas.medida = dbo.CalculosStock.medida
AND CPR_Parque.fecha >= dbo.CalculosStock.fecha
), 0)
go

Asegurate de que al menos esas tablas tengan indices por las columnas con
las que se relacionan.


AMB

"Arnauri" wrote:

A ver si esto te da una pista:

UPDATE CalculosStock
SET cantidadB=cantidad
FROM CalculosStock
INNER JOIN
(SELECT CalculosStock.id_articulo, CalculosStock.medida, ISNULL(COUNT(*),
0) AS cantidad
FROM CalculosStock
INNER JOIN
(SELECT articulos.cod_articulo AS id_articulo, PLA_PistasLineas.medida,
CPR_Parque.fecha
FROM PLA_PistasLineas
INNER JOIN lineasPedidos
ON
PLA_PistasLineas.id_linea_pedido_general=lineasPedidos.id_linea_pedido_general
INNER JOIN articulos
ON lineasPedidos.id_articulo = articulos.id_articulo
INNER JOIN PLA_Pistas
ON PLA_PistasLineas.id_planificacion=PLA_Pistas.id_planificacion
INNER JOIN CPR_Parque
ON PLA_Pistas.cod_ordenproduccion = CPR_Parque.cod_ordenproduccion
WHERE situacion='TER'
AND CPR_Parque.fecha>='03/06/06'
) AS ttemp
ON CalculosStock.id_articulo= ttemp.id_articulo
AND CalculosStock.medida= ttemp.medida
AND CalculosStock.fecha <= ttemp.fecha
GROUP BY CalculosStock.id_articulo, CalculosStock.medida) as tttemp
ON CalculosStock.id_articulo=tttemp.id_articulo
AND CalculosStock.medida=tttemp.medida

Estoy usando SQLServer 2000.

Un saludo




"Maxi" wrote:

> Hola, necesitaerias mas informacion al respecto, lo primero seria
>
> 1) Version de SQLserver y service pack
> 2) Planes de ejecuion de cada uno de ellos
> 3) si es posible el codigo del update
>
> "Arnauri" escribió en el mensaje
> news:
> > Hola a todos:
> > Tengo una UPDATE bastante compleja que trata un montón de datos. Si la
> > ejecuto desde el analizador de consultas tarda unos 8 segundos en
> > ejecutarse.
> > Si introduzco esta UPDATE en un procedimiento almacenado y lo ejecuto,
> > tarda
> > en ejecutarse casi 5 minutos. He hecho mil pruebas y no he conseguido
> > averiguar nada. ¿A alguien se le ocurre a que se puede deber esta
> > diferencia
> > tan grande?
> >
> > Un saludo y gracias por adelantado.
>
>
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida