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