由于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并未释放相应占用的内存。 它只是腾出新的空间为之后所执行脚本所用。

Sql Server  并没有提供任何命令允许我们释放不用到的内存。因此我们只能通过动态调整 Sql Server可用的物理内存设置来强迫它释放内存。

操作原理是调整内存配置大小。手动操作方法:

1.打开Sql Server Management(企业管理器);

2.打开Sql Server实例的属性面板;

3.找到内存设置,改变其中的最大服务器内存使用即可 
 
使用脚本操作:
--强制释放内存

CREATE procedure [dbo].ClearMemory

as

begin  
 
--清除所有缓存
DBCC DROPCLEANBUFFERS 
--打开高级配置

exec sp_configure 'show advanced options', 1

--设置最大内存值,清除现有缓存空间

exec sp_configure 'max server memory', 256

EXEC ('RECONFIGURE')

--设置等待时间

WAITFOR DELAY '00:00:01'

--重新设置最大内存值

EXEC  sp_configure 'max server memory', 4096

EXEC ('RECONFIGURE')

--关闭高级配置

exec sp_configure 'show advanced options',0

GO  
 

下面提供内存查看功能的一些脚本语句:
 
--内存使用情况     
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 
RECONFIGURE 
GO 
 
sp_configure 'max server memory', 2147483647 
RECONFIGURE 
GO 
 
sp_configure 'max server memory', 256 
RECONFIGURE 
GO 
sp_configure 'show advanced options', 0

 
-----------------------------------------------------------------------------------------------

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
 
*/

sqlserver内存释放的更多相关文章

  1. sqlserver内存释放心得

    SQL Server 2008 或者R2的默认内存分配是2147483647MB, 差不多算是无穷大,对于系统内存的管理策略是有多少占多少.SQLserver会把所有处理过的SQL操作缓存在内存里,这 ...

  2. 关于vector的内存释放问题

    以前一直想当然的以为vector 的clear()函数会保证释放vector的内存,今天网上一查资料发现完全不是我想象的那样子. 比如有如下代码: tempObject obj1; tempObjec ...

  3. STL 内存释放

    C++ STL 中的map,vector等内存释放问题是一个很令开发者头痛的问题,关于 stl内部的内存是自己内部实现的allocator,关于其内部的内存管理本文不做介绍,只是 介绍一下STL内存释 ...

  4. java 笔记(1)-—— JVM基础,内存数据,内存释放,垃圾回收,即时编译技术JIT,高精度类型

    1.java中5个存放数据的地方: (1).寄存器(Registers):位于CPU内部,是速度最快的存储区,但是数量和容量有限.在java中不能直接操作寄存器. (2).栈(Stack):栈位于通用 ...

  5. zw版【转发·台湾nvp系列Delphi例程】.NET调用HALCON COM控件内存释放模式

    zw版[转发·台湾nvp系列Delphi例程].NET调用HALCON COM控件内存释放模式 ------------------------------------方法一 :Imports Sys ...

  6. WebBrowser的内存释放

    WebBrowser窗口自动滚动: this.webBrowser.Document.Window.ScrollTo(0, webBrowser1.Document.Body.ScrollRectan ...

  7. [super dealloc]内存释放的先后顺序

    心得:从前做内存释放,只是觉得应该,没体会到这个的重要性,如果不及时释放就会有很多内存泄露,就像我早期遇到的前赴后继的崩溃,比如:没使用完,就释放会崩溃等明显的release问题.     作为全局的 ...

  8. MKMapView的内存释放问题

    MKMapView的内存释放问题 by 伍雪颖 - (void)dealloc { self.mapView.showsUserLocation = NO; self.mapView.userTrac ...

  9. Unity3D内存释放

    Unity3D内存释放 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resourc ...

随机推荐

  1. java web应用程序目录

    WEB-INF是用来存储服务端配置文件信息和在服务端运行的类文件的,它下面的东西不允许客户端直接访问的.

  2. c socket(续)

    存在两种字节顺序:NBO与HBO 网络字节顺序NBO(Network Byte Order):按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题. 主机字节顺序(HBO,Host ...

  3. LeetCode OJ 152. Maximum Product Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  4. LeetCode OJ 73. Set Matrix Zeroes

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. click ...

  5. erlang ets表

    一.表遍历 通过ets:first/1获取表的第一个关键字,表中下一个关键字用ets:next/2得到,直到ets:next/2返回'$end_of_table' 当多几个进程并发访问ets表时,可以 ...

  6. 588. [NOIP1999] 拦截导弹

    588. [NOIP1999] 拦截导弹 ★  输入文件:missile.in  输出文件:missile.out  简单对比 时间限制:1 s 内存限制:128 MB 题目描述 某国为了防御敌国的导 ...

  7. 关于oracle数据库(7)查询1

    查询所有列数据 select * from 表名; 查询指定列数据 效率高于查询所有列数据 select 列名,列名,列名 from 表名; --先执行from后面的代码,找到表,在执行select后 ...

  8. MemoryStream 转 pdf

    在项目开发中用到将MemoryStream 转pdf,在转化过程中需要建了一个.dom格式的模板,先保存为.doc文件,然后再转换为.pdf. 有一个插件感觉好不错,给大家推荐一下. dll下载链接  ...

  9. 基于Flash与window平台本地程序通信实现媒体流发布

    0 Web场景下的媒体流发布可以采用Flash原生API实现,但是Flash H264视频压缩参数不可控.音频无法AAC编码,所以一般采用浏览器插件方式,但是浏览器插件有版本兼容问题.不稳定,所以可以 ...

  10. 封装一个DivTag

    封装一个DivTag,在页面加载的时候自动执行.用于创建任意的DOM节点,并且可以追加到任意的DOM节点上,可以设置样式,添加文本.var element = { __init__: function ...