¿Cuándo debo reconstruir los índices en mi base de datos relacional (SQL Server)?
¿Existe algún caso para reconstruir índices de manera regular?
sql-server
index-maintenance
Nick Chammas
fuente
fuente
Respuestas:
A riesgo de ser demasiado general en mi respuesta, diré que debe ejecutar un proceso de mantenimiento de índice regularmente. Sin embargo, su proceso de mantenimiento de índice solo debe reconstruir / reorganizar los índices que lo requieren específicamente.
Esto presenta la pregunta: ¿cuándo se debe reconstruir o reorganizar un índice? Rolando tocó esto muy bien. Nuevamente, me arriesgo a ser extremadamente amplio. Un índice requiere mantenimiento cuando el nivel de fragmentación afecta negativamente el rendimiento. Este nivel de fragmentación podría variar según el tamaño y la composición del índice.
Hablando para SQL Server, tiendo a elegir un tamaño de índice y un nivel de fragmentación del índice, en cuyo punto empiezo a realizar el mantenimiento del índice. Si un índice contiene menos de 100 páginas, no realizaré mantenimiento.
Si un índice está entre 10% y 30% fragmentado, haré
REORGANIZE
el índice yUPDATE
las estadísticas. Si un índice está fragmentado en más de un 30%, lo haréREBUILD
, con noUPDATE STATISTICS
, ya que esto se encarga de estoREBUILD
. Sin embargo, recuerde que una reconstrucción solo actualiza el objeto de estadísticas directamente asociado con el índice. Otras estadísticas de columna deberán mantenerse por separado.Esta respuesta es realmente un largo camino para decir: Sí, debe realizar un mantenimiento de índice de rutina, pero solo en los índices que lo necesitan.
fuente
Debería reconstruir los índices cuando se vuelvan muy fragmentados por eventos especiales. Por ejemplo, realiza una gran carga de datos en una tabla indexada.
Entonces, ¿qué pasa si sus índices se fragmentan regularmente debido a la actividad regular? ¿Debería programar reconstrucciones regulares? ¿Con qué frecuencia deberían correr?
Tom Kyte , en este hilo clásico de Ask Tom , recomienda:
La lógica aquí es sólida, pero está sesgada en contra de un perfil de carga de lectura pesada.
Un índice "grueso" (es decir, uno con muchos espacios en blanco) realmente mantiene una buena cantidad de espacio para filas nuevas y movidas, reduciendo así las divisiones de página y manteniendo sus escrituras rápidas. Sin embargo, cuando lea de ese índice grueso tendrá que leer más páginas para obtener los mismos datos porque ahora está revisando más espacio vacío. Esto ralentiza tus lecturas.
Por lo tanto, en bases de datos con mucha lectura, desea reconstruir o reorganizar regularmente sus índices. (¿Con qué frecuencia y bajo qué condiciones? Matt M ya tiene una respuesta concreta a esta pregunta). En las bases de datos que experimentan una actividad de lectura y escritura más o menos equivalente, o en bases de datos que tienen mucha escritura, es probable que esté perjudicando el rendimiento de su base de datos al reconstruir índices regularmente.
fuente
La mayoría de las personas los reconstruyen de manera regular para que nunca lleguen a fragmentarse. Cuando necesita reconstruirlos se basa en la rapidez con que se fragmentan. Algunos índices deberán reconstruirse con frecuencia, otros básicamente nunca. Echa un vistazo a la secuencia de comandos que el SQLFool creó que maneja muchas de estas cosas por ti.
fuente
Como se señaló en la respuesta aceptada de Matt M, una regla general común es que los índices que están fragmentados en más del 30% deben reconstruirse.
Esta consulta lo ayudará a encontrar cuántos índices tiene más del 30% de fragmentación (cuando tenga algunos, debe reconstruirlos):
fuente
Cuando el porcentaje de fragmentación del índice es superior al 30%.
No existe tal caso, pero en general, realizar el Mantenimiento del índice una vez por semana, durante el fin de semana, es la mejor práctica para mantener estable el entorno.
Recomendaría usar scripts de mantenimiento de Ola Hallengren (los mejores scripts de mantenimiento), personalizar los scripts según su entorno y programarlos para que se ejecuten durante el fin de semana.
https://ola.hallengren.com/
Nota: No olvide actualizar las estadísticas después de reconstruir índices, porque la reconstrucción de índices no actualiza todas las estadísticas.
fuente
Como con la mayoría de las cosas en TI, depende. ¿Qué problema estás tratando de solucionar haciendo índices de reconstrucción? ¿Puedes demostrar que realmente soluciona el problema? Si es así, modifique los números hasta que encuentre la menor cantidad de mantenimiento que necesita hacer para solucionar el problema.
Si no soluciona el problema, o la razón por la que lo está haciendo es solo para apaciguar algunas métricas que monitorea porque podrían mejorar las cosas, entonces todo lo que está haciendo es quemar CPU e IO y posiblemente empeorar su problema.
Hay un argumento de que arreglar la fragmentación no hará ninguna diferencia en su servidor, entonces, ¿vale la pena hacerlo regularmente?
https://www.brentozar.com/archive/2017/12/index-maintenance-madness/
http://brentozar.com/go/defrag
fuente