¿Detener los servicios de SQL Server antes de desfragmentar la unidad?

8

Los archivos de datos de nuestra base de datos de producción SQL Server 2005 viven en una unidad física separada, que la herramienta Desfragmentador de disco de Microsoft Windows 2003 informa como 99% fragmentada.

Programamos una tarea para desfragmentar esta unidad a las 3:00 a.m. de un sábado por la mañana. El trabajo se completó después de 40 minutos sin errores aparentes. Sin embargo, el disco sigue muy fragmentado.

¿Deberíamos haber detenido los servicios de SQL Server antes de la desfragmentación?

CONTEXTO

Según las solicitudes de contexto: tenemos una instancia de Microsoft SQL Server 2005 (9.00.5324.00) que ejecuta Windows Server 2003 (SP2) de 32 bits en el hardware Dell PowerEdge 2950, ​​alrededor del año 2007, con 4 GB de RAM. El PowerEdge 2950 tiene cuatro unidades de 68 GB configuradas como RAID-1 para crear dos discos virtuales de 68 GB: (1) C (arranque y sistema operativo) y D (archivo de paginación, otros datos varios); y (2) E (datos SQL). Que yo sepa, el personal de TI nunca ha desfragmentado ninguna de estas unidades ... El Desfragmentador de disco informa una fragmentación de archivos del 66% (C), 77% (D) y 99% (E). El Monitor de rendimiento informa los siguientes resultados promedio: "Archivo de paginación:% de uso" = ~ 6.8% ; "SQL Server: Administrador de búfer - Esperanza de vida de la página" = 20 segundos ; y "PhysicalDisk: Promedio de disco seg / escritura, unidad E" = entre 300 y 1,. Nos esperan una actualización muy necesaria de hardware y SQL Server en unos meses (a saber, nuevo hardware, Windows Server 2012 de 64 bits, SQL Server 2012 de 64 bits, 12 GB de RAM), pero, debido al final, rendimiento del usuario, desea aliviar el problema tanto como sea posible. Por lo tanto, pensar que una desfragmentación de archivos podría ayudar a la unidad E, la unidad principal de datos SQL.

Como comentario aparte, la semana pasada sacamos dos unidades fallidas y reconstruimos la matriz ... no estoy seguro de que importe. Contratamos a otro equipo de TI para mantener el servidor, por lo que no tenemos acceso directo al equipo ... nuestra organización solo paga por los servicios.

Podemos permitirnos el tiempo de inactividad durante las ventanas de mantenimiento programadas regularmente (semanalmente), así como el tiempo de inactividad fuera de banda, según sea necesario, durante la noche.

iokevins
fuente
66
¿Tiene alguna medida para indicar que la fragmentación del disco físico está teniendo un impacto significativo? ¿Puedes permitirte el tiempo de inactividad?
Remus Rusanu
2
@RemusRusanu: ¿cómo saber si un determinado nivel de fragmentación está teniendo un efecto general negativo en el sistema sin desfragmentarlo? La inspección del número de E / S divididas a través del Monitor de rendimiento puede ayudar, aunque será difícil correlacionar eso con la actividad dentro de SQL Server. Esto no significa una confrontación, por cierto, ¡tengo mucha curiosidad!
Max Vernon
44
@MaxVernon: Por el bien de la teoría, supongo que XPerf . También se podría medir lado a lado creando una base de datos no fragmentada en el mismo disco y ejecutando una carga de trabajo capturada. Sin embargo, por todas las razones prácticas, la probabilidad de que los problemas de rendimiento prevalentes estén en la aplicación frente a la fragmentación es abrumadora.
Remus Rusanu
3
Mi experiencia me dice 99 de cada 100 veces (o más) que definitivamente estaría de acuerdo. Es mucho más probable que los problemas de rendimiento se deban a que algunos ORM están funcionando por SELECT *todas partes o por alguna otra mala práctica.
Max Vernon
1
Antes de realizar cualquier otro cambio, y ciertamente antes de intentar una desfragmentación, debe asegurarse de que las matrices se hayan reconstruido por completo. Y un consejo para su nuevo sistema: obtenga la mayor cantidad de RAM que pueda pagar, desea la mayor cantidad de datos SQL a los que accede regularmente en la memoria, ya que la RAM es 1,000 veces más rápida que los discos más rápidos.
Max Vernon

Respuestas:

2

Personalmente, he utilizado Raxco PerfectDisk (no asociado con la compañía ni con ninguno de sus empleados de ninguna manera) para realizar defrags en línea de LUN de SQL Server. Funciona perfectamente, si ralentiza un poco el servidor. Recomendaría hacerlo durante los períodos de actividad más ligera. Cuando digo "funciona perfectamente" me refiero a que no corrompe el volumen o los archivos de datos SQL.

El desfragmentador incorporado hace un trabajo muy pobre si ciertas estructuras están fragmentadas en el disco. PerfectDisk le muestra detalles sobre todos los elementos que están fragmentados, incluidas las tablas de asignación de NTFS, directorios, secuencias de archivos alternativas, etc.

¿PerfectDisk desfragmenta las bases de datos SQL? http://support.raxco.com/KB/a106/does-perfectdisk-defragment-sql-databases.aspx

Consulte esta copia de archivo de la revista Technet News Magazine sobre SQL Server y la fragmentación: http://web.archive.org/web/20100803204458/http://www.microsoft.com/technet/abouttn/flash/tips/tips_083104.mspx

Max Vernon
fuente
2
Pero el comentario de Remus tiene mucho más mérito que solo señalar un producto. No creo que alguna vez haya desfragmentado un disco de Windows en el que estaba SQL, y nunca he visto una fuerte indicación de que lo necesitaba. Windows puede decir que una unidad está fragmentada, pero lo importante es si SQL Server está experimentando algún problema debido a ello. En muchos casos sospecho que realmente no importa y que no hay necesidad de ejecutar desfragmentados a nivel de sistema de archivos. Dices que "funciona perfectamente" pero ¿observaste una mejora apreciable? ¿Puedes dar detalles?
Aaron Bertrand
1
Estoy de acuerdo, Aaron, para la mayoría de los casos, la fragmentación física en un Servidor SQL de ingeniería adecuada tendrá un efecto muy mínimo. Incluso como en este caso donde el usuario informa una fragmentación del 99%. Sin embargo, si el usuario tiene sus bases de datos SQL en el mismo LUN que el O / S y eso está en un solo disco o en una matriz RAID con un pequeño número de husillos, la fragmentación realmente excesiva puede tener un impacto.
Max Vernon
1
Por "realmente excesivo", me refiero a miles y miles de fragmentos. Piensa cientos de miles. Lo he visto ¡No es que esté orgulloso ni nada!
Max Vernon
Como ha dicho Brent Ozar, si está ejecutando sus bases de datos SQL en una SAN donde los datos se comparten en una matriz RAID gigante, es probable que una desfragmentación física (y de hecho una desfragmentación lógica de SQL) no tenga ningún efecto positivo medible en general rendimiento del sistema.
Max Vernon
Estoy marcando esto como la mejor respuesta actual, ya que parece "Sí" si utilizamos la herramienta correcta. ¡Gracias!
iokevins
7

Su problema no es la fragmentación del disco. Su problema es la exploración de RAM y tabla de aplicaciones:

4 GB de RAM ... 68 GB ... Vida útil de la página 20 segundos

Necesitas mucha más RAM. Al igual que en su nuevo servidor, debe tener mucho más de 12 GB. Comience con 64 GB, cuesta básicamente dimes . Y sí, arregle su aplicación para usar índices. 20 segundos es una indicación muy clara de los escaneos de tablas que destruyen el grupo de búferes. Debe corregir la aplicación, agregar los índices requeridos y corregir sus consultas . Para su caso, la desfragmentación de las unidades es tanto una pista falsa como las pistas falsas.

Ah, y mueva el registro para separar los ejes físicos de los datos . Solo.

Remus Rusanu
fuente
Gracias Remus; si tan solo gobernara el mundo ... Tenemos un contrato con un proveedor externo para la aplicación, por lo que lamentablemente no está bajo nuestro control directo. Agradezco tu perspicacia, gracias.
iokevins
1
Más RAM y SSD pueden facilitar su salida con un presupuesto bastante reducido. Pero la aplicación necesita una reparación.
Remus Rusanu
Como seguimiento, después de desfragmentar la unidad, el rendimiento solo ha mejorado marginalmente. Remus parece correcto en su diagnóstico de un problema de RAM.
iokevins
@RemusRusanu ¿Importa intentar optimizar con archivos ubicados en diferentes discos en servidores virtuales (vmware)? Esta es una pregunta general de virtualización-ignorancia ...
diegohb
-4

Brad McGehee lo describe bien aquí:

http://www.bradmcgehee.com/2011/06/do-you-ever-physically-defragment-your-sql-server-mdf-ldf-files/

... si deja el servicio de SQL Server ejecutándose durante la desfragmentación, los archivos de la base de datos están abiertos y, por lo tanto, no se desfragmentan en absoluto.

DBA_ANDY
fuente
2
Absolutamente incorrecto Al menos en versiones recientes de Windows. Como en Windows Server 2003+, o Windows XP +
Max Vernon
1
Todas las herramientas de desfragmentación de Windows usan las API del sistema para desfragmentar archivos, y lo hacen en un nivel de clúster debajo de las API de acceso a archivos. Así es como las carpetas se pueden desfragmentar con el volumen en línea.
Max Vernon