¿Cómo liberar memoria de SQL Server?

9

Tengo una instalación de sandbox de SQL Server en mi computadora local. He configurado la memoria que la instancia de SQL Server puede usar en 1000 mb. Cuando se ejecuta una operación intensiva, el uso de memoria aumenta hasta 1000 mb. Cuando finaliza la operación, SQL Server aún conserva la memoria. ¿Cómo liberar esta reserva de memoria?

jrara
fuente
2
¿Cuáles son sus min server memoryy max server memory configuraciones ? Una vez que SQL Server reserva el mínimo que especifique, nunca lo liberará a menos que cambie la configuración o devuelva la instancia. Como señaló James, si reserva más del mínimo que usted especifique, en teoría debería liberarlo cuando no lo necesite y haya presión de memoria en la máquina.
Nick Chammas
@Nick: memoria mínima del servidor: 0 (MB); memoria máxima del servidor: 600 (MB).
jrara

Respuestas:

13

Detenga / inicie el servicio, nada más liberará la memoria al sistema operativo.

Obviamente, no es algo que quiera hacer con un servidor operativo, pero es perfectamente razonable para un sandbox local. Con 3 instancias diferentes en mi computadora portátil, es la única forma viable.

Editar siguiendo el comentario de @ Nick.

Como señaló James, si reserva más del mínimo que usted especifique, en teoría debería liberarlo cuando no lo necesite y haya presión de memoria en la máquina.

¿Cuál es su definición de "no lo necesita"? Una vez que se haya llenado el grupo de búferes, no se eliminarán las páginas hasta que se vean desfavorecidas por otras páginas introducidas. Si desea recuperar la memoria de inmediato, como es el caso de @jrara, debe detenerse /comienzo.

Mark Storey-Smith
fuente
2
Según Microsoft : "En Windows Server 2003, SQL Server usa la API de notificación de memoria QueryMemoryResourceNotificationpara determinar cuándo la agrupación de almacenamiento intermedio puede asignar memoria y liberar memoria". Entonces, si solo le preocupa matar de hambre a otras aplicaciones que pueden necesitar más memoria, SQL Server en teoría liberará memoria que no necesita cuando Windows se lo indique. La única razón por la que debería necesitar forzar una liberación reiniciando la instancia es si este mecanismo no funciona según lo diseñado o si la configuración de memoria mínima / máxima es incorrecta.
Nick Chammas
Otro artículo útil de msdn para aclarar sobre este msdn.microsoft.com/en-us/library/ms178145.aspx . Mientras SQL Server haya alcanzado su configuración mínima de memoria del servidor, liberará memoria en respuesta a notificaciones de poca memoria del sistema operativo. En mi experiencia, tiene que ser bastante extremo para que esto suceda.
georgeb
Precisamente @georgeb_dba, no lo abandonará fácilmente. Ergo, pare / inicie y recupere la memoria limitada de su computadora portátil de inmediato.
Mark Storey-Smith
4
DBCC FREESYSTEMCACHE ('ALL') 
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE 

liberará la piscina.

https://msdn.microsoft.com/en-us/library/ms178529.aspx

Observaciones

La ejecución de DBCC FREESYSTEMCACHE borra la caché del plan para la instancia de SQL Server. Borrar el caché del plan provoca una recopilación de todos los planes de ejecución posteriores y puede causar una disminución repentina y temporal en el rendimiento de la consulta. Para cada caché borrado en la memoria caché del plan, el registro de errores de SQL Server contendrá el siguiente mensaje informativo: "SQL Server ha encontrado% d ocurrencias de vaciado del almacenamiento en caché para el almacenamiento en caché '% s' (parte de la memoria caché del plan) debido a "DBCC FREEPROCCACHE" o "DBCC FREESYSTEMCACHE" operaciones ". Este mensaje se registra cada cinco minutos siempre que el caché se vacíe dentro de ese intervalo de tiempo.

Daniel Decasse
fuente
1
bastante seguro de que esto realmente no reducirá la cantidad de memoria que SQL ha reservado a nivel del sistema operativo
Greg
3

Renunciará a la memoria que no está usando automáticamente, ya que otras aplicaciones intentan confirmarlo.

JamesRyan
fuente