SQLSERVER强制清除缓存
发布时间:2020-12-12 14:07:09 所属栏目: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? ? ? ? ? ? ? --查看最小最大内存? SELECT? cfg.name?AS?[Name],? cfg.configuration_id?AS?[Number],? cfg.minimum?AS?[Minimum],? cfg.maximum?AS?[Maximum],? cfg.is_dynamic?AS?[Dynamic],? cfg.is_advanced?AS?[Advanced],? cfg.value?AS?[ConfigValue],? cfg.value_in_use?AS?[RunValue],? cfg.description?AS?[Description]? FROM? sys.configurations?AS?cfg? ? --设置最小最大内存? ? ? ? sp_configure?'show?advanced?options',?1? ? go? sp_configure?'min?server?memory',0)">0? RECONFIGURE? GO? ? sp_configure?'max?server?memory',0)">2147483647? RECONFIGURE? GO? ? sp_configure?'256? RECONFIGURE? GO? sp_configure?'show?advanced?options',0)">0? ? ----------------------------------------------------------------------------------------------- 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 ? */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sqlserver综合总结
- 多列复合索引的使用 绕过微软sql server的一个缺陷
- sql – 按年份分组,月份,然后在ActiveRecord中计数3
- sqlserver2008r2 定时任务删除表中数据
- sql2000报错Successfully re-opened the local eventlog解决
- sql – IN子句如何影响oracle的性能?
- SqlServer 执行计划及Sql查询优化初探(转载至http://www.站
- sql-server – 您是否遇到SQL Server无法执行的查询,因为它
- 妙哉!sqlserver随意排序!
- sql-server – 如何在sql server上拆分一个非常大的数据库