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? --强制释放内存 begin ? exec sp_configure 'max server memory',256? WAITFOR DELAY '00:00:05' EXEC? sp_configure 'max server memory',2147483647? ?
--使用示例 reclaimmemory ? */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |