Liberador de memoria MSSQL


CREATE PROCEDURE [dbo].[uspCleanMemoryEngine]
AS 
    --
    -- inicializamos variables
    --
    DECLARE @RAM AS INTEGER;
    DECLARE @MAX AS INTEGER = 1024;
    DECLARE @MIN AS INTEGER = 256;
    DECLARE @USE AS INTEGER;

    --
    -- determinamos memoria del equipo, tanto minima, maxima, disponible y uso
    --
    SET @USE = ( SELECT physical_memory_in_use_kb /1024 AS [RAM (MB)] FROM sys.dm_os_process_memory );
    
    SET @RAM = ( SELECT [physical_memory_in_bytes] / 1048576 AS [RAM (MB)]
                 FROM   [sys].[dm_os_sys_info]
               );

    SELECT @RAM AS RAMTOTAL, @USE AS RAMUSED, @MAX AS MEMORYMAX, @MIN AS MEMORYMIN

    --
    -- limpiamos procesos, buffer's y cache's de MSSQL
    --
    PRINT 'Inciando Limpieza de CACHES y BUFFERS ... '
    DBCC FREEPROCCACHE 
    DBCC DROPCLEANBUFFERS 
    DBCC FREESYSTEMCACHE ('ALL') 
    DBCC FREESESSIONCACHE 
    PRINT 'Finalizada Limpieza de CACHES y BUFFERS ... '
    
    --
    -- validamos que la memoria usada del MSSQL no sea mayor a lo maximo establecido
    --
    IF (@USE >= @MAX )
    BEGIN
        --
        -- reajustamos memoria del servicio de MSSQL 
        --
        PRINT 'Iniciando vacia de memoria ...'
        EXEC sys.sp_configure N'show advanced options', N'1';
        RECONFIGURE WITH OVERRIDE;
        EXEC sys.sp_configure N'min server memory (MB)', N'1';
        RECONFIGURE WITH OVERRIDE;
        EXEC sys.sp_configure N'max server memory (MB)', N'100';
        RECONFIGURE WITH OVERRIDE;
        EXEC sys.sp_configure N'show advanced options', N'0';
        RECONFIGURE WITH OVERRIDE;
         
        --
        -- reajustamos memoria del servicio de MSSQL y activamos espera para aplicar cambios 30 seg
        --
        PRINT 'Aplicando vaciado de memoria ...'
        WAITFOR DELAY '00:00:30'
        EXEC sys.sp_configure N'show advanced options', N'1';
        RECONFIGURE WITH OVERRIDE;
        EXEC sys.sp_configure N'max server memory (MB)', @MAX;
        RECONFIGURE WITH OVERRIDE;
        EXEC sys.sp_configure N'min server memory (MB)', @MIN;
        RECONFIGURE WITH OVERRIDE;
        EXEC sys.sp_configure N'show advanced options', N'0';
        RECONFIGURE WITH OVERRIDE;
        
        PRINT 'Finalizado vaciado de memoria ...'
    END
    
    PRINT 'Proceso completado'



GO