iTank ideas

Gestionar en caliente la memoria RAM ocupada por SQLServer

Antes de nada, vamos a averiguar la RAM máxima del sistema, la disponible y la utilizada por la instancia de SQL Server mediante Transact SQL:

SELECT (total_physical_memory_kb / 1024) AS Max_RAM_MB
FROM sys.dm_os_sys_memory

SELECT (available_physical_memory_kb / 1024) AS Free_RAM_MB
FROM sys.dm_os_sys_memory;

SELECT 
    (physical_memory_in_use_kb / 1024) AS Memory_usedby_Sqlserver_MB,
    (locked_page_allocations_kb / 1024) AS Locked_pages_used_Sqlserver_MB,
    (total_virtual_address_space_kb / 1024) AS Total_VAS_in_MB,
    process_physical_memory_low AS Physical_memory_low
FROM sys.dm_os_process_memory;

dónde en esta última:

  1. Memory_usedby_Sqlserver_MB: Este parámetro muestra la cantidad de memoria física utilizada por SQL Server en megabytes (MB). Indica cuánta memoria está siendo ocupada por SQL Server para diversas operaciones, como el almacenamiento en búfer de datos, la ejecución de consultas, la caché de planos de ejecución, entre otros.

  2. Locked_pages_used_Sqlserver_MB: Este parámetro muestra la cantidad de páginas bloqueadas en la memoria, también en megabytes (MB). Las páginas bloqueadas en la memoria son aquellas que no se pueden desalojar de la memoria física por el administrador de memoria de SQL Server. Este valor puede indicar una posible fragmentación de la memoria o una asignación ineficiente de recursos.

  3. Total_VAS_in_MB: Este parámetro muestra el tamaño total del espacio de dirección virtual (VAS) en megabytes (MB). El espacio de dirección virtual es el rango de direcciones de memoria que un proceso puede utilizar. Este valor proporciona una indicación de la cantidad total de memoria virtual disponible para el proceso de SQL Server.

  4. Physical_memory_low: Este parámetro proporciona una indicación de si SQL Server ha detectado una condición de memoria física baja. Si este valor es 1, significa que SQL Server ha detectado que el sistema tiene poca memoria física disponible. Esto puede indicar una necesidad de ajustar la configuración de memoria de SQL Server o de agregar más memoria al sistema.

Así reconfiguramos la RAM máxima asignada a SQLServer mediante TSQL

sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
sp_configure 'max server memory', 32768;   -- for 32 GB
GO  
RECONFIGURE;  
GO

Ahora podemos, liberar la memoria caché de planos de ejecución (procedimientos almacenados, consultas ad hoc…) y las páginas de datos de la memoria caché. Esto no librará RAM física sino las páginas internas de caché sin tener que reiniciar el servicio de SQLServer. Puede afectar el rendimiento de las nuevas consultas, puesto el motor SQLServer deberá recopilar de nuevo esta información caché, pero dejará espacio interno para reorganizarse.

DBCC FREEPROCCACHE;
DBCC DROPCLEANBUFFERS;