SQL Server presenta un comportamiento, para muchos algo peculiar, del consumo de memoria (es decir, como va tomando la memoria del Sistema Operativo, y como la va liberando). Este comportamiento, es una de las principales dudas existenciales de SQL Server para quienes empiezan. En este capítulo, explicamos cómo SQL Server toma y libera memoria, las opciones de configuración para limitar el consumo de memoria de SQL Server (min server memory y max server memory), la utilización de sp_configure y RECONFIGURE para comprobar o cambiar la configuración de limitación de memoria de SQL Server, consideraciones de la memoria al utilizar múltiples instancias de SQL Server, etc. |
SQL Server, por defecto al iniciarse (es decir, al arrancar el servicio sqlservr.exe), consume el mínimo de memoria RAM necesaria. Sin embargo, según empieza a trabajar (despachar consultas de nuestros usuarios, realizar Backups y otras tareas de Planes de Mantenimiento, etc.), como cualquier motor de base de datos, lee las páginas de los ficheros y las carga en buffers de memoria. Del mismo modo, es capaz de generar/compilar los planes de ejecución de consultas y procedimientos almacenados, depositando el correspondiente plan de ejecución en memoria para permitir reutilizarlo (eso sí, es una zona de memoria distinta de los buffers de memoria de datos). Por defecto, utilizará toda la memoria RAM que necesite (y que pueda utilizar, dadas las limitaciones de todo hardware), pero eso sí, la irá utilizando según la necesite y evitando la paginación (es decir, utilizará toda la memoria física que necesite, excepto en algunos casos: un Windows Vista con SQL Express y 512 MB de RAM está condenado a paginar). Este comportamiento de aumento de memoria, visto desde fuera, puede llevar a confusión, y pensar que SQL Server se vuelve loco y empieza consumuir toda la memoria RAM existente sin motivo aparente. Sin embargo, es un comportamiento normal, y no sólo eso, sino que además, esta gestión dinámica y automática de la memoria en SQL Server es la configuración recomendada. Es posible limitar la cantidad máxima de memoria RAM que deseamos que consuma una Instancia de SQL Server. Sin embargo, habitualmente en entornos de producción de medias y grandes compañías, se trata de servidores dedicados de base de datos, por lo que esta configuración no tiene sentido. Más aún, no es recomendable compartir la máquina que ejecuta SQL Server, con otros servicios de la empresa (ej: Directorio Activo, Exchange, etc.), aunque existen casos en que es así por ahorro de costes y licencias (véase el caso de Microsoft BackOffice Small Business ó Microsoft Windows Small Business Server 2003). Si deseamos establecer el límite de memoria RAM que puede consumir una Instancia de SQL Server, deberemos utilizar el procedimiento almacenado sp_configure, pudiendo establecer el valor de las propiedades min server memory y max server memory. Esta configuración puede realizarse sin reiniciar la instancia de SQL Server. Sin embargo, es una configuración avanzada, por lo que se debe habilitar previamente la configuración show advanced options.A continuación se detallan:
|
Comentarios
Publicar un comentario