¿Cómo puedo saber cuándo es el momento de desfragmentar mi base de datos SQLServer?

9

¿Cuál es la mejor práctica para medir la fragmentación de la base de datos / rendimiento de SQLServer y determinar cuándo desfragmentar una tabla de base de datos de SQLServer?

Estoy más interesado en aprender cuáles son las métricas útiles y qué nivel de degradación del rendimiento debería desencadenar la desfragmentación.

Jeff Leonard
fuente

Respuestas:

22

Estoy seguro de que habrá algunas respuestas interesantes a esto, ya que hay un gran desacuerdo sobre qué métricas mirar. Escribí DBCC INDEXDEFRAG, SHOWCONTIG y diseñé sus reemplazos para 2005, además escribí el contenido de Books Online, así que les daré mi opinión y les explicaré los números en Books Online y el asistente de plan de mantenimiento para 2005, que elegí.

Las dos mejores métricas para observar la fragmentación del índice son: 1) (2005) fragmentación promedio en porcentaje / (2000) fragmentación de escaneo lógico 2) (2005) densidad promedio de página / (2000) promedio de bytes libres por página

Estos se aplican igualmente a los índices agrupados y no agrupados.

1 está midiendo cuánta fragmentación lógica hay. Esto es cuando el orden lógico de las páginas en el nivel de hoja de un índice no coincide con el orden físico. Esto evita que el motor de almacenamiento realice una lectura eficiente durante las exploraciones de rango. Por lo tanto, el n. ° 1 afecta el rendimiento del escaneo de rango, no el rendimiento de búsqueda única.

2 mide cuánto espacio desperdiciado hay en cada página a nivel de hoja de un índice. El espacio desaprovechado significa que está utilizando más páginas para almacenar los registros, lo que significa más espacio en disco para almacenar el índice, más E / S para leer el índice y más memoria para mantener las páginas en la memoria en el grupo de búferes.

Umbrales? Mi regla general es menos del 10% de fragmentación, no hacer nada. 10-30%, hacer ALTERAR ÍNDICE ... REORGANIZAR (2005) / DBCC INDEXDEFRAG (2000). Más del 30%, ALTERAR ÍNDICE ... RECONSTRUIR (2005) / DBCC DBREINDEX (2000). Estas son generalizaciones completas y los umbrales para usted variarán.

Para encontrar sus umbrales, realice un seguimiento del rendimiento de la carga de trabajo en comparación con los niveles de fragmentación y decida cuándo la degradación del rendimiento es demasiado. En ese punto, necesitará abordar la fragmentación. Hay un acto de equilibrio entre vivir con fragmentación y aprovechar el recurso de eliminarlo.

No he tocado aquí las compensaciones entre los dos métodos para eliminar la fragmentación, cosas como FILLFACTOR / PADINDEX para tratar de mitigar la fragmentación y hacer menos desfragmentación, cambios en los patrones de esquema / acceso para aliviar la fragmentación, o diferentes tipos de planes de mantenimiento .

Ah, por cierto, siempre recomiendo no preocuparse por la fragmentación en índices con menos de 1000 páginas. Esto se debe a que el índice probablemente reside principalmente en la memoria (y porque las personas pidieron un número y tuve que encontrar uno).

Puede leer más sobre esto en mi artículo de TechNet Magazine sobre mantenimiento de bases de datos en http://technet.microsoft.com/en-us/magazine/cc671165.aspx , en el documento técnico basado en 2000 sobre mejores prácticas de desfragmentación de índice que ayudé a escribir en http://technet.microsoft.com/en-us/library/cc966523.aspx , y en mi blog en la categoría Fragmentación en http://www.sqlskills.com/BLOGS/PAUL/category/Fragmentation.aspx .

Creo que respondí en exceso a esto, pero es uno de mis puntos calientes. Espero que esto ayude :-)

Paul Randal
fuente