¿Liberar memoria en Windows Server 2019 para la instancia de SQL Server?

¿Liberar memoria en Windows Server 2019 para la instancia de SQL Server?

Contamos con Windows Server 2019 Standard (x64) con 64GB de memoria.

La siguiente captura de pantalla muestra el uso de memoria al 96% con elServidor SQL Windows NTfuncionando y usando 344,5 MB.

ingrese la descripción de la imagen aquí

Este es el Administrador de tareas después de detener el servicioServidor SQL Windows NT. El uso de la memoria se redujo al 8%.

ingrese la descripción de la imagen aquí

comienzo el servicioServidor SQL Windows NTde nuevo. El administrador de tareas es muy bajo (9%), pero el servidor Sql está usando más memoria ahora que cuando el uso de la memoria era del 96%. ingrese la descripción de la imagen aquí

Dos preguntas:

  1. ¿Cuál es el problema con la memoria?
  2. ¿Cómo puedo reducir el uso de memoria sin tener que reiniciar la instancia del servidor SQL?

Respuesta1

Te falta un detalle importante aquí: el Administrador de tareas muestra que SQL Server solo usa 344,5 MB de RAM, pero en realidad ha reservado mucho más, casi todo, para su propio uso. El Administrador de tareas no mostrará esto. Los números en el Administrador de tareas en realidad no suman el 97% de la memoria del sistema, porque la memoria reservada no se muestra allí.

Su suposición de que casi toda su memoria está consumida por otra cosa y, por lo tanto, SQL Server no puede usar más de 344,5 MB es simplemente errónea. No funciona así. El Administrador de tareas puede resultar bastante engañoso; eche un vistazo a los contadores de rendimiento reales.


Actualiza para intentar explicarlo mejor.

servidor SQLpor diseñoalmacena datos en caché en la memoria y, con el tiempo, consumirá casi toda la memoria disponible en el sistema; pero esta memoria no se muestra (o al menos no toda) en el Administrador de tareas, porque SQL Server intenta jugar bien y le dice al sistema operativo "Quiero tanta memoria, pero es solo para almacenamiento en caché, puedo sobrevivir sin ella". así que siéntete libre de reclamarlo si lo necesitas". Esto se traduce en que el Administrador de tareas muestra mucha menos memoria utilizada por SQL Server de la que realmente ha reservado.

Esto esde ninguna maneraun problema; se hace a propósito y por diseño. El "problema" que estás viendo no existe, sólo lo que ves en el Administrador de tareas es engañoso.

Si detiene SQL Server, por supuesto liberará toda la memoria asignada, tanto la que se muestra en el Administrador de tareas como la (mucha más) que no se muestra. Cuando lo inicie nuevamente, utilizará muy poca memoria: el uso volverá a crecer con el tiempo a medida que SQL Server cargue datos en la memoria y los almacene en caché. Pero la mayor parte de este recuerdo, nuevamente,nose mostrará en el Administrador de tareas, porque esa herramienta específica no puede verlo.

También agregaré que si SQL Server realmentenecesariomemoria, la asignaría de forma diferente yentoncesel Administrador de tareas lo mostraría; vería 60 GB de memoria utilizada por SQL Server si realmenterequeridoesa cantidad de memoria, en lugar de usarla sólo para el almacenamiento en caché.

Respuesta2

Está ejecutando SQL Server en esta máquina, por lo que hace lo que hace SQL Server: reserva (casi) toda la memoria disponible en el sistema operativo, de modo que cuando recibe consultas importantes u otras operaciones, no tiene que asignar RAM. , ya lo tiene.

Tienes pocas opciones.

  1. Acéptalo. Si solo está ejecutando SQL Server en esta máquina, entonces funcionará según lo previsto. Déjalo.
  2. Cúbrelo. Si necesita ejecutar otras cargas de trabajo en este servidor, puede limitar la cantidad de RAM que reservará SQL.

Absolutamente no haría la opción 2 a menos que SQL nunca use la RAM que absorbe. Solo sabrá esto si está midiendo los contadores de rendimiento de SQL a nivel del sistema operativo y las vistas de administración dinámica a nivel de SQL.

Panorama general, ¿qué problema estás tratando de resolver realmente? "Liberar memoria" en este escenario es una tarea inútil a menos que sepas que la estás liberando para usarla en otra cosa. ¿Tiene problemas de rendimiento de SQL y, de ser así, cómo ha determinado que tiene un cuello de botella debido a la RAM en lugar de, por ejemplo, un mal diseño de índice o consultas no optimizadas?

A lo que te estoy llevando esUtilice una supervisión adecuada para diagnosticar problemas de rendimiento.Necesita saber mucho sobre SQL y bastante sobre Windows para hacer esto. Si no es un DBA, contrate uno o firme un contrato, o trabaje con su proveedor de software si se trata de SQL para un producto comprado. Si es algo que su empresa escribió sin un DBA, consiga uno.

https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/monitor-memory-usage?view=sql-server-ver15

De forma predeterminada, una instancia de SQL Server puede consumir con el tiempo la mayor parte de la memoria disponible del sistema operativo Windows en el servidor. Una vez adquirida la memoria, no se liberará a menos que se detecte presión en la memoria. Esto es así por diseño y no indica una pérdida de memoria en el proceso de SQL Server.

/Editar según su edición:

Aunque no soy administrador del sistema, me parece que el servidor SQL está usando poca memoria porque Windows consume todo lo demás.

Es casi seguro que estás equivocado aquí. Como mencioné anteriormente, el servidor SQL asignará casi toda la RAM del sistema con el tiempo. La cantidad de RAM utilizada por el proceso sqlserver.exe NO indica cuánta RAM ha asignado realmente SQL. Los DMV y los contadores de rendimiento se lo dirán.

Utilizo SSMS para trabajar con las bases de datos y noto de primera mano lo lento que es todo. Incluso cosas simples como abrir el panel de tablas para ver todas mis tablas toman un tiempo y, a veces, se agotan.

No lo ejecute en el servidor SQL, ejecútelo desde su estación de trabajo.

información relacionada