Problema de rendimiento: Cambio en el plan de ejecucion

20/01/2006 - 12:58 por e.lorenzo | Informe spam
Saludos a todos y gracias anticipadas a quien pueda ayudarme.

Tenemos una aplicacion que lanza secuencias con la siguiente estructura:

CREATE TABLE TMPXXX

INSERT INTO TMPXXXX SELECT YYY FROM ZZZ

SELECT AAA FROM TMPXXX, WWWW

La cuestion es que si lo lanza todo seguido, los tiempos son muy buenos.
En algunos casos, se hace una comprobacion de si la tabla temporal que hay
que crear ya existe (de otra secuencia anterior) y, en estos casos, nos
encontramos con que cambia completamente el plan de ejecucion y la
consulta tarda mucho.

Investigando, probamos a poner un GO entre el INSERT y el SELECT y nos
vuelve a dar mal tiempo. Deducimos que al hacer el GO, SQL Server debia
actualizar las estadisticas de la tabla y modificaba el plan de ejecucion.

?Alguien puede decirme si esto tiene sentido? ?Alguna forma para
"eliminar" las estadisticas de la tabla y asi que coja el plan bueno?

Hemos hecho pruebas forzando el plan y se corrige, pero estropeamos otras
casuisticas.

Es SQL Server 2000.

Gracias y un saludo
 

Leer las respuestas

#1 Jose Mariano Alvarez
20/01/2006 - 15:06 | Informe spam
Podrias aclarar mas cosas.
No se entiende que quieres hacer.

Puedes eliminar las estadirsticas con drop statistics, puedes evitar que se
cree o se actualicen desde las opciones de configuracion de la base de datos,
puedes create indices explicitos a la tabla temporal, puedes usar variables
tabla, etc.

Ahora si todo se hace mediante table scan (segun dejan mostrar la queries)
no entiendo el sentido tu duda de cambiar el plan.

Ing. Jose Mariano Alvarez

J0sé P-u-n-t-0 Marian0 P-u-n-t-0 Álvarez ** gma1l P-u-n-t-0 c0n <-- M
(Saca guiones, blancos, acentos, ceros por o)

http://www.sqlgurus.org


"Quique" wrote:

Saludos a todos y gracias anticipadas a quien pueda ayudarme.

Tenemos una aplicacion que lanza secuencias con la siguiente estructura:

CREATE TABLE TMPXXX

INSERT INTO TMPXXXX SELECT YYY FROM ZZZ

SELECT AAA FROM TMPXXX, WWWW

La cuestion es que si lo lanza todo seguido, los tiempos son muy buenos.
En algunos casos, se hace una comprobacion de si la tabla temporal que hay
que crear ya existe (de otra secuencia anterior) y, en estos casos, nos
encontramos con que cambia completamente el plan de ejecucion y la
consulta tarda mucho.

Investigando, probamos a poner un GO entre el INSERT y el SELECT y nos
vuelve a dar mal tiempo. Deducimos que al hacer el GO, SQL Server debia
actualizar las estadisticas de la tabla y modificaba el plan de ejecucion.

?Alguien puede decirme si esto tiene sentido? ?Alguna forma para
"eliminar" las estadisticas de la tabla y asi que coja el plan bueno?

Hemos hecho pruebas forzando el plan y se corrige, pero estropeamos otras
casuisticas.

Es SQL Server 2000.

Gracias y un saludo



Preguntas similares