Sé que realmente hay tres tipos de fragmentación que me deben preocupar como DBA:
Fragmentación de índice en los archivos de datos SQL, incluida la fragmentación de índice agrupado (tabla). Identifique esto usando DBCC SHOWCONTIG (en SQL 2000) o sys.dm_ db_ index_ physical_ stats (en 2005+).
Fragmentación de VLF dentro de los archivos de registro SQL. Ejecute DBCC LOGINFO para ver cuántos VLF hay en cada uno de sus archivos de registro SQL.
Fragmentación de archivos físicos de los archivos de la base de datos en el disco duro. Diagnostique esto utilizando la utilidad "Desfragmentador de disco" en Windows. (inspirado en esta excelente publicación de blog )
Se presta mucha atención a la fragmentación del índice (consulte esta excelente respuesta de Serverfault de Paul Randall), por lo que ese no es el enfoque de mi pregunta.
Sé que puedo evitar la fragmentación física (y la fragmentación de VLF) cuando la base de datos se crea originalmente planificando un archivo de datos y un tamaño de registro razonables, porque esta fragmentación ocurre con mayor frecuencia debido a crecimientos y reducciones frecuentes, pero tengo algunas preguntas sobre cómo solucionar fragmentación física una vez que se identifica:
En primer lugar, ¿es la fragmentación física incluso relevante en una SAN empresarial? ¿Puedo / debo usar el Desfragmentador de Windows en una unidad SAN, o el equipo de SAN debe usar utilidades de desfragmentación internas? ¿El análisis de fragmentación que obtengo de la herramienta de Windows es incluso preciso cuando se ejecuta en una unidad SAN?
¿Qué tan importante es la fragmentación física en el rendimiento de SQL? (Supongamos una matriz de unidades internas, en espera del resultado de la pregunta anterior). ¿Es un acuerdo MÁS GRANDE que la fragmentación del índice interno? ¿O es realmente el mismo tipo de problema (la unidad tiene que hacer lecturas aleatorias en lugar de lecturas secuenciales)
¿Desfragmentar (o reconstruir) los índices es una pérdida de tiempo si la unidad está físicamente fragmentada? ¿Tengo que arreglar uno antes de dirigirme al otro?
¿Cuál es la mejor manera de arreglar la fragmentación de archivos físicos en un cuadro SQL de producción? Sé que puedo desactivar los servicios SQL y ejecutar Windows Defrag, pero también escuché sobre una técnica en la que haces una copia de seguridad completa, sueltas la base de datos y luego la restauras desde una copia de seguridad a una unidad vacía. ¿Se recomienda esta última técnica? ¿Restaurar desde una copia de seguridad como esta también genera índices desde cero, eliminando la fragmentación interna del índice? ¿O simplemente devuelve el orden de las páginas al mismo que cuando se realizó la copia de seguridad? (Estamos utilizando copias de seguridad de Quest Lightspeed con compresión, si eso importa).
ACTUALIZACIÓN : buenas respuestas hasta ahora sobre si desfragmentar unidades SAN (NO) y si la desfragmentación de índice todavía vale la pena en unidades físicamente fragmentadas (SÍ).
¿A alguien más le interesa evaluar los mejores métodos para hacer la desfragmentación? ¿O una estimación del tiempo que esperaría que llevara desfragmentar una unidad de disco grande y fragmentada, digamos unos 500 GB? Relevante, obviamente, porque ese es el momento en que mi servidor SQL estará inactivo.
Además, si alguien tiene información anecdótica sobre las mejoras de rendimiento de SQL que ha realizado al corregir la fragmentación física, también sería genial. La publicación del blog de Mike habla sobre descubrir el problema, pero no es específico sobre qué tipo de mejora hizo.