欢迎来到天天文库
浏览记录
ID:20958252
大小:57.50 KB
页数:4页
时间:2018-10-18
《优化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
此文档下载收益归作者所有