Published on

January 8, 2019

Comprendiendo la asignación de memoria en SQL Server

Cuando se trata de optimizar el rendimiento de tu SQL Server, uno de los factores clave a considerar es la asignación de memoria. Asignar la cantidad adecuada de memoria puede mejorar significativamente la velocidad y eficiencia de tus consultas. En este artículo, exploraremos el concepto de asignación de memoria en SQL Server y discutiremos cómo puede afectar el rendimiento de tu base de datos.

Imagina que acabas de configurar un nuevo SQL Server y quieres asegurarte de que tus consultas se ejecuten lo más rápido posible. Una de las primeras cosas que podrías considerar es aumentar la cantidad de memoria disponible para tu servidor. Más memoria significa que se pueden almacenar más páginas de datos en el búfer de caché, lo que reduce la necesidad de E/S de disco y mejora el rendimiento de las consultas. Además, tener más memoria permite que SQL Server realice la clasificación en memoria de los datos, lo que puede ser más rápido que la clasificación dentro de la aplicación.

Sin embargo, es importante tener en cuenta que no todos los servidores se ejecutan en configuraciones de memoria alta. De hecho, algunos servidores aún pueden funcionar con memoria limitada, como 16 GB, incluso en entornos de producción. En este artículo, nos centraremos en escenarios donde la memoria está limitada y discutiremos cómo optimizar la asignación de memoria en tales situaciones.

Tradicionalmente, ha existido una fórmula para calcular la memoria máxima por consulta. Sin embargo, vale la pena mencionar que el comportamiento de SQL Server 2016 y versiones más recientes puede diferir de las versiones anteriores. Echemos un vistazo a la configuración del administrador de recursos para comprender la fórmula actual de asignación de memoria:

SELECT * FROM sys.resource_governor_external_resource_pools

Según mi configuración de SQL Server, la fórmula para la memoria máxima por consulta se calcula de la siguiente manera: (Memoria máxima de SQL Server * 90%) * 20%. Por ejemplo, si la memoria máxima del servidor está configurada en 10 GB, la memoria máxima esperada por consulta sería (10 GB * 0.90) * 0.20 = 1.8 GB.

Para demostrar este concepto, creemos una tabla que requiera una gran asignación de memoria:

CREATE TABLE BigMemoryGrant (Id INT IDENTITY(1,1), column1 NVARCHAR(max));
GO
CREATE CLUSTERED INDEX cx_BigMemoryGrant on BigMemoryGrant(Id);
GO
INSERT INTO BigMemoryGrant
SELECT 'A'
FROM sys.messages
INSERT INTO BigMemoryGrant
SELECT 'B'
FROM sys.messages
INSERT INTO BigMemoryGrant
SELECT 'C'
FROM sys.messages

Ahora, ejecutemos una consulta que solicite una cantidad significativa de memoria:

SELECT * FROM BigMemoryGrant
ORDER BY column1

Según nuestra fórmula, la asignación máxima de memoria para esta consulta sería de 1.8 GB o 1,827,560 KB. Cuando ejecutamos la consulta, observamos que la asignación máxima real es ligeramente mayor que nuestro valor predicho, lo cual es lo suficientemente cercano para propósitos prácticos.

Al comprender la fórmula de asignación de memoria y optimizar la configuración de memoria de tu SQL Server, puedes esperar ver asignaciones de memoria más altas cuando se agregue memoria adicional a tu servidor. Esto, a su vez, puede llevar a una mejora en el rendimiento de las consultas y en la eficiencia general de la base de datos.

¡Mantente atento a más artículos sobre técnicas de optimización y mejores prácticas de SQL Server!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.