Lo primero para empezar el trabajo con SQL Server es preparar el ambiente. La instalación…
¿Es posible liberar memoria en SQL Server?
Posiblemente ya te lo hayas preguntado antes, pero, ¿qué acciones tomaste para esto? No me digas que reiniciando el servicio porque empezamos mal esta conversación. Lo que sí quiero discutir es si realmente es posible liberar memoria en SQL Server.
MUY IMPORTANTE…antes de todo
Te recomiendo que primero tengas claro Cómo Configurar la Memoria en SQL Server. Si después de ello todavía tienes la duda de cómo liberar memoria, adelante con el artículo.
Déjame preguntarte, ¿cuál es el motivo para que quieras «liberar» memoria?
Y sí, lo pongo entre comillas porque quisiera entender bien qué es lo que piensas que puedes obtener y cúal es el motivo que te lleva a tener un objetivo como ese.
¡Déjame adivinar! Y es que muchos lugares que he visitado las situaciones son similares.
1) Monitor de Recursos
Ya sea que tengas un sistema de monitoreo o tu herramienta sea el Task Manager, seguro que ves un gráfico similar a este.
Y seguro que si has ido haciendo un seguimiento durante más tiempo, ves una pendiente que parece que en ningún momento va a detener su crecimiento mientras te preocupa la cantidad de memoria disponible o la cantidad de memoria en uso en tu servidor.
– «Ya casi pasa el 90% y nunca baja»
– «¿Qué hacemos?»
/ * Ya escucho decir a alguien */
– «¿y si reiniciamos el servicio para que baje la memoria?»
2) Errores en las consultas
Puede ser que también ya hayas generado algunos errores en el servidor. O que simplemente tus consultas ya no parezcan entregar los resultados.
Referencias a ‘memory allocation‘, ‘insufficient memory‘, ‘not enough memory‘ y otras que pueden ser vista desde el SSMS, desde Data Tools, al ejecutar una traza, al cargar un archivo csv, u otros, suelen hacer pensar que el servidor necesita «liberar» algo de memoria.
¿Y qué soluciones te han ofrecido?
Seguramente desde reiniciar el servidor, reiniciar los servicios, otros vienen tratando de ser más sofisticados y te hablan de FREESYSTEMCACHE, FREEPROCCACHE, DROPCLEANBUFFERS y tantos otros.
Y te dejo cada uno de ellos con enlaces para que veas en la documentación oficial, el significado de cada uno de ellos.
¡SORPRESA! Ninguno de ellos está hecho para «liberar» memoria.
Nuevamente te dejo el enlace a la publicación de Configuración de memoria en SQL Server para que puedas entender cómo funciona este recurso en el servidor.
Si estás trabajando en un ambiente de Producción, atendiendo cientos o miles de usuarios, no creo que quieras perder todo lo que ya está optimizado en los cachés de Planes de Ejecución o las páginas de datos cargadas en los buffers de memoria.
Pero reiniciar el servidor parece liberar memoria en SQL Server
¡Por supuesto! Seguro viste cómo el consumo de memoria RAM baja casi a cero. Pero…perderás todo aquello que ha sido optimizado y empezarás de cero en tu servidor.
Otra vez tiempos de espera de compilación y otra vez lectura en disco generando I/O antes de usar los buffers de memoria.
Además, te aseguro que de a poco (o de un solo golpe) en el tiempo otra vez verás la pendiente en memoria RAM que te llevará a la misma discusión.
Ya te lo dije en la publicación anterior, SQL Server está diseñado para usar toda la memoria disponible que tenga de acuerdo con la mejor manera que le parezca. Una asignación dinámica de recursos será su forma de trabajo, por eso es importante que tengas las configuraciones adecuadas.