优化sqlserver的内存占用之执行缓存

优化sqlserver的内存占用之执行缓存

ID:20958252

大小:57.50 KB

页数:4页

时间:2018-10-18

优化sqlserver的内存占用之执行缓存_第1页
优化sqlserver的内存占用之执行缓存_第2页
优化sqlserver的内存占用之执行缓存_第3页
优化sqlserver的内存占用之执行缓存_第4页
资源描述:

《优化sqlserver的内存占用之执行缓存》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、优化SQLServer的内存占用之执行缓存>>教育资源库  在论坛上常见有朋友抱怨,说SQLServer太吃内存了。这里笔者根据经验简单介绍一下内存相关的调优知识。首先说明一下SQLServer内存占用由哪几部分组成。SQLServer占用的内存主要由三部分组成:数据缓存(DataBuffer)、执行缓存(ProcedureCache)、以及SQLServer引擎程序。SQLServer引擎程序所占用缓存一般相对变化不大,则我们进行内存调优的主要着眼点在数据缓存和执行缓存的控制上。本文主要介绍一下执行缓存的

2、调优。数据缓存的调优将在另外的文章中介绍。  对于减少执行缓存的占用,主要可以通过使用参数化查询减少内存占用。1、使用参数化查询减少执行缓存占用  我们通过如下例子来说明一下使用参数化查询对缓存占用的影响。为方便试验,我们使用了一台没有其它负载的SQLServer进行如下实验。  下面的脚本循环执行一个简单的查询,共执行10000次。  首先,我们清空一下SQLServer已经占用的缓存:  dbccfreeproccache  然后,执行脚本:  DECLAREtdatetime  SETt=getdat

3、e()  SETNOCOUNTON  DECLAREiINT,countINT,sqlnvarchar(4000)  SETi=20000  P_OrderobileNo='+cast(iasvarchar(10))  EXECsp_executesqlsql,N'countINTOUTPUT',countOUTPUT  SETi=i+1  END  PRINTDATEDIFF(second,t,current_timestamp)  输出:  DBCC执行完毕。如果DBCC输出了错

4、误信息,请与系统管理员联系。  11  使用了11秒完成10000次查询。  我们看一下SQLServer缓存中所占用的查询计划:  SelectCount(*)T,sum(size_in_bytes)TotalSize  Fromsys.dm_exec_cached_plans  查询结果:共有2628条执行计划缓存在SQLServer中。它们所占用的缓存达到:  92172288字节=90012KB=87MB。  我们也可以使用dbccmemorystatus命令来检查SQLServer的执行缓存和数据

5、缓存占用。  执行结果如下:        执行缓存占用了90088KB,有2629个查询计划在缓存里,有1489页空闲内存(每页8KB)可以被数据缓存和其他请求所使用。  我们现在修改一下前面的脚本,然后重新执行一下dbccfreeproccache。再执行一遍修改后的脚本:  DECLAREtdatetime  SETt=getdate()  SETNOCOUNTON  DECLAREiINT,countINT,sqlnvarchar(4000)  SETi=20000  P_OrderobileNo=

6、i'  EXECsp_executesqlsql,N'countintoutput,iint',countOUTPUT,i  SETi=i+1  END  PRINTDATEDIFF(second,t,current_timestamp)  输出:  DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。  1  即这次只用1秒钟即完成了10000次查询。  我们再看一下sys.dm_exec_cached_plans中的查询计划:  SelectCount(*)T,su

7、m(size_in_bytes)TotalSizeFromsys.dm_exec_cached_plans  查询结果:共有4条执行计划被缓存。它们共占用内存:172032字节=168KB。  如果执行dbccmemorystatus,则得到结果:    12下一页>>>>这篇文章来自..,。    有12875页空闲内存(每页8KB)可以被数据缓存所使用。  到这里,我们已经看到了一个反差相当明显的结果。在现实中,这个例子中的前者,正是经常被使用的一种执行SQL脚本的方式(例如:在程序中通过合并字符串方式

8、拼成一条SQL语句,然后通过ADO.或者ADO方式传入SQLServer执行)。  解释一下原因:  我们知道,SQL语句在执行前首先将被编译并通过查询优化引擎进行优化,从而得到优化后的执行计划,然后按照执行计划被执行。对于整体相似、仅仅是参数不同的SQL语句,SQLServer可以重用执行计划。但对于不同的SQL语句,SQLServer并不能重复使用以前的执行计划,而是需要重新编译出一个新的执行计划。同时,SQ

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。