加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver内存释放

发布时间:2020-12-12 12:40:15 所属栏目:MsSql教程 来源:网络整理
导读:由于Sql?Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),? ?Sql?Server才会释放一点点内存。所以很多时候,我们会发现运行Sql?Server的系统内存往往居高不下。? ?这些内存一般都是Sql?Server运行时候用作缓
由于Sql?Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),?
?Sql?Server才会释放一点点内存。所以很多时候,我们会发现运行Sql?Server的系统内存往往居高不下。?
?这些内存一般都是Sql?Server运行时候用作缓存的,例如你运行一个select语句,?

?那么Sql?Server会将相关的数据页(Sql?Server操作的数据都是以页为单位的)加载到内存中来,?
?下一次如果再次请求此页的数据的时候,就无需读取磁盘了,大大提高了速度。这类的缓存叫做数据缓存。?
?还有一些其他类型的缓存,如执行存储过程时,Sql?Server需要先编译再运行,编译后的结果也会缓存起来,?
?下一次就无需再次编译了。如果这些缓存已经不需要了,那么我们可以调用以下几个DBCC管理命令来清理这些缓存:?
??
?DBCC?FREEPROCCACHE?
?DBCC?FREESESSIONCACHE?
?DBCC?FREESYSTEMCACHE('All')?
?DBCC?DROPCLEANBUFFERS?
?这几个命令分别用来清除存储过程相关的缓存、会话缓存、系统缓存以及所有所有缓存?
?但是需要注意的是,这几个命令虽然会清除掉现有缓存,为新的缓存腾地方,?
?但是Sql?server并不会因此释放掉已经占用的内存。无奈的是,Sql?Server?
?并没有提供任何命令允许我们释放不用到的内存。因此我们只能通过动态调整?
?Sql?Server可用的物理内存设置来强迫它释放内存。?
?我们也可以通过Sql?Server?Management企业管理器进行动态控制。?
?连接到企业管理器之后打开Sql?Server实例的属性面板,?
?找到内存设置,改变其中的最大服务器内存使用即可?
?
--内存使用情况?????
SELECT?*?FROM?sys.dm_os_performance_counters?
WHERE?counter_name?IN?('Target?Server?Memory?(KB)','Total?Server?Memory?(KB)')?
--?内存状态?
DBCC?MemoryStatus?
--查看最小最大内存?
cfg.name?AS?[Name],?
cfg.configuration_id??[Number],sans-serif; line-height:18px">cfg.minimum??[Minimum],sans-serif; line-height:18px">cfg.maximum??[Maximum],sans-serif; line-height:18px">cfg.is_dynamic??[Dynamic],sans-serif; line-height:18px">cfg.is_advanced??[Advanced],sans-serif; line-height:18px">cfg.value??[ConfigValue],sans-serif; line-height:18px">cfg.value_in_use??[RunValue],sans-serif; line-height:18px">cfg.description??[Description]?
sys.configurations??cfg?
--设置最小最大内存?
sp_configure?'show?advanced?options',?1go?
sp_configure?'min?server?memory',sans-serif; color:#ff00; line-height:18px">0RECONFIGURE?
GO?
max2147483647256? ? -----------------------------------------------------------------------------------------------

CREATE proc [dbo].reclaimmemory? --强制释放内存
????
????
as

begin
?
?DBCC FREEPROCCACHE?
?DBCC FREESESSIONCACHE?
?DBCC FREESYSTEMCACHE('All')?
?DBCC DROPCLEANBUFFERS

?

exec sp_configure 'max server memory',256?
EXEC ('RECONFIGURE' )

WAITFOR DELAY '00:00:05'

EXEC? sp_configure 'max server memory',2147483647?
EXEC ('RECONFIGURE' )
GO

?


end

--使用示例
/*

reclaimmemory ? */

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读