¿Reiniciar SQL Server lo acelera?

22

He notado que algunos DBA reinician SQL Server con mucha frecuencia, a veces incluso todas las noches. Creo que lo hacen para liberar algo de memoria, o tal vez para acelerar las consultas también. Sé que después de una consulta de reinicio, los planes deben volver a compilarse, pero incluso eso me pregunto si hay un beneficio neto para esta práctica.

¿Es cierto que reiniciar SQL Server a diario lo hace correr más rápido?

Nick Chammas
fuente

Respuestas:

37

Reiniciar el servidor es probablemente una de las cosas más perjudiciales para el rendimiento. Significa que fuerza un caché frío para datos, un caché frío para planes de consulta y todas las cachés internas de SQL Server también se agregan en el proceso. Sin mencionar que al descartar todas las estadísticas recopiladas en los DMV de estadísticas operativas, disminuye sus posibilidades de investigar algo con éxito.

No existe una guía oficial que respalde esta práctica, nunca la he visto mencionada en ninguna buena práctica de trabajo de buena reputación, nunca escuché de un experto de buena reputación que mencione esto como una práctica. No lo hagas

Remus Rusanu
fuente
Estoy en desacuerdo. SQL Server está alojado en un servidor de Windows donde los parches de seguridad y las actualizaciones de MS requieren reinicios periódicos. Creo que un mejor diseño de SQL es la clave para resolver problemas de rendimiento y no depender de reinicios del servidor, pero a veces es un paso necesario.
Fandango68
27

Si bien las otras respuestas son buenas, les falta una pieza importante: el caché de archivos de Windows.

En Windows de 64 bits, no hay límite para la cantidad de memoria que Windows usará para almacenar en caché los archivos. Windows puede agotar su sistema completamente sin memoria, y en ese punto, comenzará a cambiar al disco. Se ha documentado en algunos lugares:

Al reiniciar SQL Server, obliga a SQL a renunciar a la memoria, lo que permite que Windows obtenga más y la paginación se detiene temporalmente. SQL comenzará de nuevo con el uso de memoria casi cero y aumentará gradualmente, y cuando el cuadro se quede sin memoria nuevamente, el reinicio ayudará temporalmente. Al reiniciar todo el sistema operativo, también forzará el uso de la memoria caché de archivos de Windows.

La solución real: deje de copiar archivos del servidor de Windows o limite la cantidad de caché de archivos en uso con el Servicio de caché de archivos dinámicos como se documenta en las publicaciones de blog anteriores.

Brent Ozar
fuente
3
+1 Conocía el problema, no sabía que la memoria caché podría limitarse utilizando el servicio de memoria caché dinámica.
Mark Storey-Smith
¿La práctica de "anclar" la memoria a un MIN y MAX (aunque deberían y podrían ser exactamente la misma cantidad de KB) ayudaría a asegurar que SQL Server solo consuma una cantidad predefinida de RAM MIN / MAX permitiendo otros servicios / aplicaciones de Windows / solicitudes de red para continuar funcionando. Esta ha sido mi práctica y ha funcionado bien. ¿Alguna otra idea?
SnapJag
@SnapJag: no necesariamente, porque SQL no consume la cantidad mínima de inmediato. SQL comienza en cero y aumenta gradualmente según la necesidad.
Brent Ozar
11

Si acelera las consultas, podría estar involucrado el rastreo de parámetros . Si un plan de basura se almacena en caché y se aplica a llamadas posteriores inapropiadas, entonces el milagro de reiniciar permite que el plan común / correcto se almacene en caché. Si ese es el caso, hay formas infinitamente mejores de corregir el comportamiento como otros han indicado. Pero hasta que dejen de reiniciar el cuadro, no hay forma de realizar un análisis de causa raíz.

billinkc
fuente
Esta debería haber sido la respuesta aceptada. El diseño adecuado de SQL y el diseño del plan son cruciales para evitar la necesidad de reiniciar el servidor, pero los reinicios del servidor pueden ser necesarios de todos modos debido a las políticas del servidor, como parches de seguridad, etc.
Fandango68
11

No debería reiniciar SQL Server a menos que haya cambiado las propiedades del servicio o establecido rastreos de inicio que desee que entren en vigencia de inmediato.

Como @RemusRusanu ha declarado muchos puntos, borra muchos cachés y hace que SQL Server haga mucho trabajo de inicio innecesario .

Parece que este servidor no es un servidor SQL Server / servidor de base de datos dedicado. Es una buena práctica tener un servidor de base de datos de producción que tenga un solo propósito ... ser un servidor de base de datos. En ese caso, reservaría suficiente memoria y recursos para el sistema operativo y le daría todo lo demás a SQL Server. Esto lo llevaría a no privar a ninguna otra aplicación o rol de servidor.

Thomas Stringer
fuente
2

Estoy de acuerdo con el sentimiento de que si está haciendo todo bien, es posible que no necesite reiniciar / reiniciar su servidor MSSQL.
Para mí, esto se aplica al escenario en el que todos son competentes y puedes arreglar cualquier cosa.

No soy un DBA. Soy arquitecto de software y parte de eso implica construir esquemas de bases de datos completos desde cero y, desafortunadamente , trabajar con bases de datos de terceros sobre las cuales no tengo absolutamente ningún control.
Las personas, que crearon y mantienen una de nuestras principales bases de datos de terceros, apenas lo hicieron funcional.

¿Mencioné que tampoco soy experto en seguridad o ingeniero de redes?

  • Al menos una actualización del sistema operativo de la ventana principal, la actualización de seguridad, la actualización del BIOS, el paquete de servicio OS / MSSQL o la actualización acumulativa MSSQL seguramente saldrán cada mes o dos.
  • Aplicarlos de manera oportuna significa reiniciar / reiniciar su servidor aproximadamente cada trimestre.
  • Incluso cuando se opera dentro de una Intranet, ¿por qué no aplicar las actualizaciones de seguridad?
  • Si se me permitiera tener SSL en nuestros sitios web de Intranet de PHI, lo haría porque ninguna red es infalible. Soy paranoico, supongo.


Para mí, la pregunta es: ¿Debería reiniciar SQL Server con más frecuencia que cada 3 meses?

La programación de reinicios con la promesa de una pulgada extra de rendimiento, es como bailar por la lluvia.
Tal vez vendrá, tal vez no, pero no sabrás con certeza qué causó que lloviera.

  • Si nota un aumento significativo en el rendimiento después de reiniciar el servidor debido a un mantenimiento regular, entonces debe investigar por qué sucede eso.
  • Si tiene problemas y no está seguro de qué los está causando, a medida que reduce sus variables al detener los servicios y trabajos para encontrar algo como una pérdida de memoria (en casos extremos como este), puede reiniciar / reiniciar su servidor con algunos servicios activados desactivado (o los rastros activados) lo ayudarán a descartar esos otros servicios como la causa.

No me gusta decir que nunca necesidad de reiniciarla para solucionar un problema o verificar la conmutación por error, pero hacer que tenga un problema con la programación de reinicios para mantener un problema de rendimiento desconocido que se produzcan al azar.

La única excepción a esto es si administra una base de datos de terceros deshonesta en la que reiniciarla cada semana o dos parece ser la única forma de mantenerla en funcionamiento y no puede repararla ni siquiera tocarla.
Incluso entonces, debes buscar soluciones, compartirlas con el propietario y provocar el infierno hasta que se resuelva.

MikeTeeVee
fuente