`
baobaojinjin
  • 浏览: 141981 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ms sql server缓存清除与内存释放

 
阅读更多

Sql Server系统内存管理在没有配置内存最大值,很多时候我们会发现运行Sql Server的系统内存往往居高不下。这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存使用虑达到系统峰值时(预留内存根据系统默认预留使用为准,至少4M),才会清除一些缓存释放少量的内存为新的缓存腾出空间。

这些内存一般都是Sql Server运行时候用作缓存的,例如你运行一个select语句, 执行个存储过程,调用函数;

1. 数据缓存:执行个查询语句,Sql Server会将相关的数据页(Sql Server操作的数据都是以页为单位的)加载到内存中来, 下一次如果再次请求此页的数据的时候,就无需读取磁盘了,大大提高了速度。

2.执行命令缓存:在执行存储过程,自定函数时,Sql Server需要先二进制编译再运行,编译后的结果也会缓存起来, 再次调用时就无需再次编译。

 

在我们执行完相应的查询语句,或存储过程,如果我们不在需要这些缓存,我可以将它清除,DBCC管理命令缓存清除如下:

  1.   --清除存储过程缓存   
  2.   
  3. DBCC FREEPROCCACHE  
  4.   
  5. --注:方便记住关键字 FREEPROCCACHE 可以拆解成 FREE(割舍,清除) PROC(存储过程关键字简写),CACHE(缓存)  

 

  1. --清除会话缓存  
  2.   
  3.  DBCC FREESESSIONCACHE   
  4.   
  5. --注: FREE(割舍,清除) SESSION(会话) CACHE(缓存)   

 

  1. --清除系统缓存  
  2.   
  3.  DBCC FREESYSTEMCACHE('All')  
  4.   
  5. --注:FREE  SYSTE MCACHE  

 

  1. --清除所有缓存  
  2.   
  3.  DBCC DROPCLEANBUFFERS  
  4.   
  5. --注: DROP CLEAN BUFFERS  

 

 

虽然我们已经清除了缓存,但是sql并未释放相应占用的内存。 它只是腾出新的空间为之后所执行脚本所用。Sql Server  并没有提供任何命令允许我们释放不用到的内存。因此我们只能通过动态调整 Sql Server可用的物理内存设置来强迫它释放内存。

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

1.打开Sql Server Management(企业管理器);
2.打开Sql Server实例的属性面板;
3.找到内存设置,改变其中的最大服务器内存使用即可 。

 

使用脚本操作:

 

  1. --强制释放内存  
  2. CREATE procedure [dbo].ClearMemory    
  3. as  
  4. begin  
  5. --清除所有缓存  
  6. DBCC DROPCLEANBUFFERS  
  7. --打开高级配置  
  8. exec sp_configure 'show advanced options', 1  
  9. --设置最大内存值,清除现有缓存空间  
  10. exec sp_configure 'max server memory', 256  
  11. EXEC ('RECONFIGURE')  
  12. --设置等待时间  
  13. WAITFOR DELAY '00:00:01'  
  14. --重新设置最大内存值  
  15. EXEC  sp_configure 'max server memory', 4096  
  16. EXEC ('RECONFIGURE')  
  17. --关闭高级配置  
  18. exec sp_configure 'show advanced options',0  
  19. GO  


下面提供内存查看功能的一些脚本语句:

 

  1.   --内存使用情况       
  2.   
  3. SELECT * FROM sys.dm_os_performance_counters   
  4. WHERE counter_name IN ('Target Server Memory (KB)','Total Server Memory (KB)')   

 

  1. -- 内存状态   
  2. DBCC MemoryStatus   

 

  1. --查看最小最大内存   
  2. SELECT configuration_id as id,name as 名称,minimum as 配置最小值, maximum as 最大值,   
  3. is_dynamic as 是否动态值, is_advanced as 是否优先, value_in_use AS 运行值,   
  4. description as 描述 FROM sys.configurations  
  5.    
分享到:
评论

相关推荐

    SQL21日自学通

    SQL*PLUS 缓存430 DESCRIBE 命令435 SHOW 命令436 文件命令438 SAVE GET EDIT 命令438 运行一个文件439 查询的假脱机输出440 SET 命令442 LOGINSQL 文件445 CLEAR 命令446 将你的输出格式化446 TTITLE 与BTITLE446...

    asp.net知识库

    在Framework1.0下同时连接SqlServer和Oracle的一些体会 XML XPath XPath最通俗的教程(ZZ) XPath中相对路径和绝对路径 XPath 简单语法 Asp.Net(C#)利用XPath解析XML文档示例 XSL .Net框架下的XSLT转换技术简介 一个...

    21天学习SQL V1.0

    21天学习SQL V1.0.pdf 66 SQL 21 日自学通(V1.0) 翻译人笨猪 EMAIL wyhsillypig@163.com 2 日期/时间函数.........................................................................................................

    娱乐先锋论坛 KQJBBS 4.7版

    论坛功能: (1)支持 Access 、MS SQL SERVER、ORACLE、MYSQL 数据库 (2)论坛的共享数据数据采用服务器缓存机制,极大的减少访问数据库的次数,从而web服务器的性能。系统速度快,占用的系统资源极少。...

    娱乐先锋论坛KQJBBS 5.1版

    (1)支持 Access 、MS SQL SERVER、ORACLE、MYSQL 数据库 (2)支持IE、Netscape、Opera等浏览器访问论坛 (3)支持论坛的共享数据数据在服务器缓存,极大提高web服务器的性能。 (4)支持无限级子论坛...

    net学习笔记及其他代码应用

    28.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号 答:Select ID FROM table1 Where ...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    JAVA上百实例源码以及开源项目

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    KQJBBS (娱乐先锋论坛) V3.1

    论坛功能 (1)支持 Access 、MS SQL SERVER、ORACLE、MYSQL 数据库 (2)论坛的共享数据数据采用服务器缓存机制,极大的减少访问数据库的次数,从而web服务器的性能。系统速度快,占用的系统资源极少。 ...

    asp.net面试题

    五、下列ASP.NET语句( )正确地创建了一个与SQL Server数据库的连接。 A.SqlConnection con1 = new Connection(“Data Source = localhost; Trusted_Connection =Yes; Initial Catalog = myDB”); B.SqlConnection ...

Global site tag (gtag.js) - Google Analytics