Consulta va lenta.

20/10/2003 - 09:53 por Antonio Liberal | Informe spam
Hola buenas, tengo una tabla con cerca de 3 millones de registros, donde
guardo los movimientos de stock de una aplicación, guardada en un SQL-Server
2000

La sentencia es la siguiente:
SELECT EMPRESA, CODART, TIPORI, TIPDES, CANTID
INTO #MOV0 FROM MOVALMACEN WHERE EMPRESA= '01' AND FECHA>(CONVERT(DATETIME, '2003/09/30', 102) + 1)

(Se obtienen unos 40.000 registros)

Tengo un índice por EMPRESA,FECHA. Si ejecuto el plan de ejecución me da que
utiliza dicho índice. Sin embargo me tarda cerca de 2 minutos, como si se
recorriera toda la tabla. Estoy en un entorno de pruebas y el único usuario
soy yo.

¿Como puedo optimizar la consulta para que me funcione más rápido?

Gracias.

Preguntas similare

Leer las respuestas

#6 Carlos Sacristan
21/10/2003 - 09:59 | Informe spam
Efectivamente no le vendría nada mal una defragmentación en esos objetos
;-)

Por otra parte, hay un pequeño artículo en www.portalsql.com de Jesús
López (SQLRanger) acerca de cuándo hay que defragmentar los índices. Busca
"Fragmentación de los índices", seguro te orienta



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)
MVP SQL Server
Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL

Archivo de respuestas anteriores en:
http://groups.google.com/groups?hl=....public.es
.sqlserver

(Guía de netiquette del foro)
http://www.helpdna.net/bosqlfaq00.htm
http://perso.wanadoo.es/rubenvigon/foro

(FAQ's de SQL Server)
http://support.microsoft.com/defaul.../70faq.asp
http://www.helpdna.net/bosqlfaq.htm

"Antonio Liberal" escribió en
el mensaje news:
Hola Carlos, gracias por responder. Me parece que va a ser esto. He
recuperado la tabla principal y me da los siguientes resultados (te los
pongo al final del post).
Una cosa, ya he visto que los indices se pueden defragmentar con DBCC
INDEXDEFRAG ó regenerándolos de nuevo. Tengo un plan de mantenimiento para
hacer la copia de seguridad de la base de datos. Con la opción Reorganizar
páginas de datos e índices en la solapa de Optimizaciones, me valdría,


¿no?

Saludos.


DBCC SHOWCONTIG recorriendo la tabla 'MOVALMACEN'...
Tabla: 'MOVALMACEN' (544213189); Id. de índice: 1, Id. de base de datos: 7
Realizado recorrido de nivel TABLE.
- Páginas recorridas: 59415
- Extensiones recorridas..: 7466
- Cambios de extensión..: 59300
- Promedio de páginas por extensión: 8.0
- Densidad de recorrido [Cuenta óptima:Cuenta real]...: 12.52%
[7427:59301]
- Fragmentación del recorrido lógico ..: 49.85%
- Fragmentación del recorrido de extensión ...: 63.35%
- Promedio de bytes libres por página.: 2510.7
- Promedio de densidad de página (completa).: 68.98%
DBCC SHOWCONTIG recorriendo la tabla 'MOVALMACEN'...
Tabla: 'MOVALMACEN' (544213189); Id. de índice: 11, Id. de base de datos:


7
Realizado recorrido de nivel LEAF.
- Páginas recorridas: 19716
- Extensiones recorridas..: 2491
- Cambios de extensión..: 15496
- Promedio de páginas por extensión: 7.9
- Densidad de recorrido [Cuenta óptima:Cuenta real]...: 15.91%
[2465:15497]
- Fragmentación del recorrido lógico ..: 42.54%
- Fragmentación del recorrido de extensión ...: 63.99%
- Promedio de bytes libres por página.: 2334.7
- Promedio de densidad de página (completa).: 71.16%
DBCC SHOWCONTIG recorriendo la tabla 'MOVALMACEN'...
Tabla: 'MOVALMACEN' (544213189); Id. de índice: 12, Id. de base de datos:


7
Realizado recorrido de nivel LEAF.
- Páginas recorridas: 15065
- Extensiones recorridas..: 1902
- Cambios de extensión..: 8785
- Promedio de páginas por extensión: 7.9
- Densidad de recorrido [Cuenta óptima:Cuenta real]...: 21.44%
[1884:8786]
- Fragmentación del recorrido lógico ..: 25.93%
- Fragmentación del recorrido de extensión ...: 55.89%
- Promedio de bytes libres por página.: 1473.5
- Promedio de densidad de página (completa).: 81.80%
Ejecución de DBCC completada. Si hay mensajes de error, consulte al
administrador del sistema.

"Carlos Sacristan" escribió en el mensaje
news:%
>
> Echa un vistazo a lo que te presenta el resultado de la instrucción
DBCC
> SHOWCONTIG ("Presenta información de la fragmentación de los datos y los
> índices de la tabla especificada.", textual de los BOL)
>
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
> MVP SQL Server
> Por favor, responder únicamente al foro
> Se agradece la inclusión de sentencias DDL
>
> Archivo de respuestas anteriores en:
>



http://groups.google.com/groups?hl=....public.es
> .sqlserver
>
> (Guía de netiquette del foro)
> http://www.helpdna.net/bosqlfaq00.htm
> http://perso.wanadoo.es/rubenvigon/foro
>
> (FAQ's de SQL Server)
> http://support.microsoft.com/defaul.../70faq.asp
> http://www.helpdna.net/bosqlfaq.htm
>
> "Antonio Liberal"


escribió
en
> el mensaje news:#
> > Hola Gustavo, gracias por responder (a Liliana también). Dejé un post
> ayer,
> > pero no sale en el hilo
> > Con lo siguiente he conseguido mejorar notablemente la velocidad:
> > 1. Volqué todos los datos de la tabla a una auxiliar.
> > 2. Desactivé los disparadores de la tabla principal.
> > 3. Borré los datos de dicha tabla.
> > 4. Volqué los datos de la auxiliar a la principal.
> > 5. Activé los disparadores.
> >
> > A partír de aquí la consulta va mucho más rápida. Había observado que


al
> > hacer la consulta el servidor le daba mucha "caña" a los discos. Es


algo
> así
> > como si los datos estuvieran fragmentados. ¿Existe alguna forma de
conocer
> > cómo están repartidos los datos por el disco? ¿Se pueden


"defragmentar"
de
> > alguna manera que no sea la que he hecho?
> >
> > Gracias.
> >
> > "Gustavo Larriera [MVP]" escribió


en
> el
> > mensaje news:
> > > Antonio: Tambien sugiero que nos envies el plan de ejecución


generado
en
> > > modo texto.
> > >
> > > SET SHOWPLAN_TEXT ON
> > > GO
> > > USE NombreDeLaBaseDeDatos
> > > SELECT EMPRESA, CODART, TIPORI, TIPDES, CANTID
> > > INTO #MOV0 FROM MOVALMACEN
> > > WHERE EMPRESA= '01' AND FECHA>=(CONVERT(DATETIME, '2003/09/30', 102)


+
> 1)
> > > GO
> > >
> > >
> > > Gustavo Larriera, MSFT MVP-SQL
> > > Uruguay LatAm
> > >
> > > This message is provided "AS IS" with no warranties expressed or
> implied,
> > > and confers no rights.
> > >
> > >
> > > "Liliana Sorrentino" wrote in


message
> > > news:
> > > > Antonio,
> > > > ¿Podrías mandar la definición de tu tabla?
> > > > ¿En el ejemplo estás buscando a partir del 01/10/2003 y esa fecha
> entra
> > > por
> > > > parámetro?
> > > >
> > > > Saludos... Liliana.
> > > >
> > > >
> > > > "Antonio Liberal"
> > escribió
> > > en
> > > > el mensaje news:
> > > > > Hola buenas, tengo una tabla con cerca de 3 millones de


registros,
> > donde
> > > > > guardo los movimientos de stock de una aplicación, guardada en


un
> > > > SQL-Server
> > > > > 2000
> > > > >
> > > > > La sentencia es la siguiente:
> > > > > SELECT EMPRESA, CODART, TIPORI, TIPDES, CANTID
> > > > > INTO #MOV0 FROM MOVALMACEN WHERE EMPRESA= '01' AND FECHA>> > > > > > (CONVERT(DATETIME, '2003/09/30', 102) + 1)
> > > > >
> > > > > (Se obtienen unos 40.000 registros)
> > > > >
> > > > > Tengo un índice por EMPRESA,FECHA. Si ejecuto el plan de


ejecución
> me
> > da
> > > > que
> > > > > utiliza dicho índice. Sin embargo me tarda cerca de 2 minutos,
como
> si
> > > se
> > > > > recorriera toda la tabla. Estoy en un entorno de pruebas y el
único
> > > > usuario
> > > > > soy yo.
> > > > >
> > > > > ¿Como puedo optimizar la consulta para que me funcione más


rápido?
> > > > >
> > > > > Gracias.
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Antonio Liberal
21/10/2003 - 10:24 | Informe spam
Perdona que te de el coñazo. He activado la opción y ejecutado la tarea de
reorganización. Al hacerlo me da el siguiente error:
[Microsoft SQL-DMO (ODBC SQLState: 42000)] Error 1934: [Microsoft][ODBC SQL
Server Driver][SQL Server]Error de DBCC porque las siguientes opciones SET
tienen una configuración incorrecta: 'QUOTED_IDENTIFIER, ARITHABORT'.

El QUOTED_IDENTIFIER no lo he tocado (la base de datos está creada como
quien dice por defecto). El ARITHABORT lo tengo puesto a off precisamente
en la tabla que me dió problemas, en un disparador. Lo he puesto entre
comentarios, pero me sigue dando el mismo error. ¿A qué puede deberse este
error?

Gracias por tu ayuda.

"Carlos Sacristan" escribió en el mensaje
news:

Efectivamente no le vendría nada mal una defragmentación en esos


objetos
;-)

Por otra parte, hay un pequeño artículo en www.portalsql.com de Jesús
López (SQLRanger) acerca de cuándo hay que defragmentar los índices. Busca
"Fragmentación de los índices", seguro te orienta



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)
MVP SQL Server
Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL

Archivo de respuestas anteriores en:



http://groups.google.com/groups?hl=....public.es
.sqlserver

(Guía de netiquette del foro)
http://www.helpdna.net/bosqlfaq00.htm
http://perso.wanadoo.es/rubenvigon/foro

(FAQ's de SQL Server)
http://support.microsoft.com/defaul.../70faq.asp
http://www.helpdna.net/bosqlfaq.htm

"Antonio Liberal" escribió


en
el mensaje news:
> Hola Carlos, gracias por responder. Me parece que va a ser esto. He
> recuperado la tabla principal y me da los siguientes resultados (te los
> pongo al final del post).
> Una cosa, ya he visto que los indices se pueden defragmentar con DBCC
> INDEXDEFRAG ó regenerándolos de nuevo. Tengo un plan de mantenimiento


para
> hacer la copia de seguridad de la base de datos. Con la opción


Reorganizar
> páginas de datos e índices en la solapa de Optimizaciones, me valdría,
¿no?
>
> Saludos.
>
>
> DBCC SHOWCONTIG recorriendo la tabla 'MOVALMACEN'...
> Tabla: 'MOVALMACEN' (544213189); Id. de índice: 1, Id. de base de datos:


7
> Realizado recorrido de nivel TABLE.
> - Páginas recorridas: 59415
> - Extensiones recorridas..: 7466
> - Cambios de extensión..: 59300
> - Promedio de páginas por extensión: 8.0
> - Densidad de recorrido [Cuenta óptima:Cuenta real]...: 12.52%
> [7427:59301]
> - Fragmentación del recorrido lógico ..: 49.85%
> - Fragmentación del recorrido de extensión ...: 63.35%
> - Promedio de bytes libres por página.: 2510.7
> - Promedio de densidad de página (completa).: 68.98%
> DBCC SHOWCONTIG recorriendo la tabla 'MOVALMACEN'...
> Tabla: 'MOVALMACEN' (544213189); Id. de índice: 11, Id. de base de


datos:
7
> Realizado recorrido de nivel LEAF.
> - Páginas recorridas: 19716
> - Extensiones recorridas..: 2491
> - Cambios de extensión..: 15496
> - Promedio de páginas por extensión: 7.9
> - Densidad de recorrido [Cuenta óptima:Cuenta real]...: 15.91%
> [2465:15497]
> - Fragmentación del recorrido lógico ..: 42.54%
> - Fragmentación del recorrido de extensión ...: 63.99%
> - Promedio de bytes libres por página.: 2334.7
> - Promedio de densidad de página (completa).: 71.16%
> DBCC SHOWCONTIG recorriendo la tabla 'MOVALMACEN'...
> Tabla: 'MOVALMACEN' (544213189); Id. de índice: 12, Id. de base de


datos:
7
> Realizado recorrido de nivel LEAF.
> - Páginas recorridas: 15065
> - Extensiones recorridas..: 1902
> - Cambios de extensión..: 8785
> - Promedio de páginas por extensión: 7.9
> - Densidad de recorrido [Cuenta óptima:Cuenta real]...: 21.44%
> [1884:8786]
> - Fragmentación del recorrido lógico ..: 25.93%
> - Fragmentación del recorrido de extensión ...: 55.89%
> - Promedio de bytes libres por página.: 1473.5
> - Promedio de densidad de página (completa).: 81.80%
> Ejecución de DBCC completada. Si hay mensajes de error, consulte al
> administrador del sistema.
>
> "Carlos Sacristan" escribió en el mensaje
> news:%
> >
> > Echa un vistazo a lo que te presenta el resultado de la


instrucción
> DBCC
> > SHOWCONTIG ("Presenta información de la fragmentación de los datos y


los
> > índices de la tabla especificada.", textual de los BOL)
> >
> >
> >
> > Un saludo
> >
> > -
> > "Sólo sé que no sé nada. " (Sócrates)
> > MVP SQL Server
> > Por favor, responder únicamente al foro
> > Se agradece la inclusión de sentencias DDL
> >
> > Archivo de respuestas anteriores en:
> >
>



http://groups.google.com/groups?hl=....public.es
> > .sqlserver
> >
> > (Guía de netiquette del foro)
> > http://www.helpdna.net/bosqlfaq00.htm
> > http://perso.wanadoo.es/rubenvigon/foro
> >
> > (FAQ's de SQL Server)
> > http://support.microsoft.com/defaul.../70faq.asp
> > http://www.helpdna.net/bosqlfaq.htm
> >
> > "Antonio Liberal"
escribió
> en
> > el mensaje news:#
> > > Hola Gustavo, gracias por responder (a Liliana también). Dejé un


post
> > ayer,
> > > pero no sale en el hilo
> > > Con lo siguiente he conseguido mejorar notablemente la velocidad:
> > > 1. Volqué todos los datos de la tabla a una auxiliar.
> > > 2. Desactivé los disparadores de la tabla principal.
> > > 3. Borré los datos de dicha tabla.
> > > 4. Volqué los datos de la auxiliar a la principal.
> > > 5. Activé los disparadores.
> > >
> > > A partír de aquí la consulta va mucho más rápida. Había observado


que
al
> > > hacer la consulta el servidor le daba mucha "caña" a los discos. Es
algo
> > así
> > > como si los datos estuvieran fragmentados. ¿Existe alguna forma de
> conocer
> > > cómo están repartidos los datos por el disco? ¿Se pueden
"defragmentar"
> de
> > > alguna manera que no sea la que he hecho?
> > >
> > > Gracias.
> > >
> > > "Gustavo Larriera [MVP]"


escribió
en
> > el
> > > mensaje news:
> > > > Antonio: Tambien sugiero que nos envies el plan de ejecución
generado
> en
> > > > modo texto.
> > > >
> > > > SET SHOWPLAN_TEXT ON
> > > > GO
> > > > USE NombreDeLaBaseDeDatos
> > > > SELECT EMPRESA, CODART, TIPORI, TIPDES, CANTID
> > > > INTO #MOV0 FROM MOVALMACEN
> > > > WHERE EMPRESA= '01' AND FECHA>=(CONVERT(DATETIME, '2003/09/30',


102)
+
> > 1)
> > > > GO
> > > >
> > > >
> > > > Gustavo Larriera, MSFT MVP-SQL
> > > > Uruguay LatAm
> > > >
> > > > This message is provided "AS IS" with no warranties expressed or
> > implied,
> > > > and confers no rights.
> > > >
> > > >
> > > > "Liliana Sorrentino" wrote in
message
> > > > news:
> > > > > Antonio,
> > > > > ¿Podrías mandar la definición de tu tabla?
> > > > > ¿En el ejemplo estás buscando a partir del 01/10/2003 y esa


fecha
> > entra
> > > > por
> > > > > parámetro?
> > > > >
> > > > > Saludos... Liliana.
> > > > >
> > > > >
> > > > > "Antonio Liberal"
> > > escribió
> > > > en
> > > > > el mensaje news:
> > > > > > Hola buenas, tengo una tabla con cerca de 3 millones de
registros,
> > > donde
> > > > > > guardo los movimientos de stock de una aplicación, guardada en
un
> > > > > SQL-Server
> > > > > > 2000
> > > > > >
> > > > > > La sentencia es la siguiente:
> > > > > > SELECT EMPRESA, CODART, TIPORI, TIPDES, CANTID
> > > > > > INTO #MOV0 FROM MOVALMACEN WHERE EMPRESA= '01' AND FECHA>> > > > > > > (CONVERT(DATETIME, '2003/09/30', 102) + 1)
> > > > > >
> > > > > > (Se obtienen unos 40.000 registros)
> > > > > >
> > > > > > Tengo un índice por EMPRESA,FECHA. Si ejecuto el plan de
ejecución
> > me
> > > da
> > > > > que
> > > > > > utiliza dicho índice. Sin embargo me tarda cerca de 2 minutos,
> como
> > si
> > > > se
> > > > > > recorriera toda la tabla. Estoy en un entorno de pruebas y el
> único
> > > > > usuario
> > > > > > soy yo.
> > > > > >
> > > > > > ¿Como puedo optimizar la consulta para que me funcione más
rápido?
> > > > > >
> > > > > > Gracias.
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida