在实际使用中会发现SQL Server占用内存很大,而且一旦占用就不在释放,如果服务器内存小,在处理大量数据后导致内存占用过高,此时再通过远程桌面远程服务器时总是失败(输入用户名密码后远程桌面就闪退),以往都是通过重启服务器来解决无法远程的问题,后来发现无法远程时,使用SSMS客户端还是可以连接上服务器数据库,所以就想办法通过脚本来收缩数据库占用的内存,收缩后,服务器远程桌面正常。在可以正常操作服务器时,亦可以通过限制数据库最大内存来进行限制,避免出现类似情况,如果出现类似情况,我们可以使用下面的脚本,先将限定内存调小,等上大概半分钟后,数据库就收缩完内存,此时一定要再调整回去,否则数据库就会一直在调小的值内运行,数据处理会慢。
DBCC FREEPROCCACHE --清除存储过程相关的缓存
DBCC FREESESSIONCACHE --会话缓存
DBCC FREESYSTEMCACHE('All') --系统缓存
DBCC DROPCLEANBUFFERS --所有缓存
/**
但是,这几个命令虽然会清除掉现有缓存,为新的缓存腾地方,但是Sql server并不会因此释放掉已经占用的内存。
Sql Server并没有提供任何命令允许我们释放不用到的内存。
因此我们只能通过动态调整Sql Server可用的物理内存设置来强迫它释放内存。
**/
--清除SQL Server服务器内存的方法:
--1,清除所有缓存
DBCC DROPCLEANBUFFERS
--2,调整可使用物理内存
--修改服务器属性,最大内存。
--将内存修改为10G
EXEC sys.sp_configure N'show advanced options', N'1' RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'max server memory (MB)', N'10000'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'show advanced options', N'0' RECONFIGURE WITH OVERRIDE
GO
--将内存恢复为35G --根据服务器具体情况设定
EXEC sys.sp_configure N'show advanced options', N'1' RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'max server memory (MB)', N'35000'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'show advanced options', N'0' RECONFIGURE WITH OVERRIDE
GO