2009-08-25 32 views
7

Recientemente me hice cargo de un proyecto y tienen una configuración de trabajo SQL para ejecutar cada tres horas, que reconstruye los índices encontrados en las tablas de la base de datos de membresía de ASP.NET.SQL Server 2005 - ¿Con qué frecuencia debe reconstruir los índices?

Esto parece bastante alto, para reconstruir índices 8 veces al día. Recibo unos 2000 usuarios nuevos todos los días, y un total de aproximadamente 2 millones de usuarios registrados.

¿Qué recomendaría para un programa de reconstrucción de índice adecuado?

Respuesta

11

Sus puntos muertos definitivamente pueden estar relacionados con la reconstrucción de los índices. Tampoco hay duda de que esos índices no necesitan ser reconstruidos con tanta frecuencia. Como mínimo, debería considerar usar la opción EN LÍNEA si puede evitar que el índice caiga antes de que se reconstruya.

Aquí es una guía que utilizamos:

Índice

debe ser reconstruido cuando el índice fragmentación es mayor del 40%. El índice debe reorganizarse cuando la fragmentación del índice se encuentre entre el 10% y el 40%. El proceso de reconstrucción del índice utiliza más CPU y bloquea los recursos de la base de datos. Versión de desarrollo de SQL Server y La versión Enterprise tiene la opción ONLINE, que se puede activar cuando Index es reconstruido. La opción ONLINE mantendrá el índice disponible durante la reconstrucción.

Fuente: http://blog.sqlauthority.com/2007/12/22/sql-server-difference-between-index-rebuild-and-index-reorganize-explained-with-t-sql-script/

0

¿La reconstrucción daña la estabilidad del sistema o requiere demasiado tiempo del sistema?

Si su respuesta es no - No lo toque por :)

+0

No parece que, pero me pongo un par de cuestiones DEADLOCKING lo largo del día relacionados con registro de nuevos usuarios. Me preguntaba si esto estaba ocurriendo debido a la reconstrucción del índice. –

+0

depende de si está realizando una reconstrucción en línea o fuera de línea. Si está fuera de línea, entonces sí puede causar interbloqueos, ya que coloca un bloqueo de lectura en el índice. Si está en línea, solo coloca un bloqueo de esquema en el índice. –

3

captura el gráfico de interbloqueo y tiene una respuesta real de lo que se deadlocking, en contraposición a un adivinar. Dado que el punto muerto es (o al menos debería ser) una ocurrencia bastante rara (menos de 10/segundo), puede adjuntar profiler bastante seguro durante un largo tiempo y capturar solo el evento Locks/Deadlock Graph.

6

Una buena regla general es RECONSTRUIR cuando más del 30% está fragmentado, REORGANIZAR cuando está entre 10% y 30%.

No se moleste ni con tablas de menos de 1000 páginas, no se dará cuenta, e incluso después de ejecutar una RECONSTRUCCIÓN por una que sea superior al 30%, a menudo se dejará en un 30%.

Probablemente su objetivo sea reconstruir/reorganizar con poca frecuencia, como máximo semanalmente para una base de datos promedio. Si tiene que desfragmentar los índices con más frecuencia que eso, probablemente necesite volver a revisar sus factores de relleno y relleno.

Una excepción es después de la carga masiva de datos, donde podría ser común fragmentar los índices (a veces es mejor desactivar el índice o quitar los índices y reconstruirlos según los datos que se cargan).

Así que en resumen, 8 veces al día parece excesivo.

Referencias:
http://technet.microsoft.com/en-us/library/ms189858.aspx
http://www.sqlmusings.com/2009/03/15/a-more-effective-selective-index-rebuildreorganize-strategy/
http://realworlddba.wordpress.com/2008/01/27/indexes-to-rebuild-or-reorganize/
http://realworlddba.wordpress.com/2008/01/27/indexes-to-rebuild-or-reorganize/

Cuestiones relacionadas