sqlserver内存.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
sqlserver内存:您的SQL Server应用程序查 询正在浪费内存吗? 疯狂代码 / ĵ http://DataBase/Article26073.html 或许在应用程序代码中找到的最常见的错误就是这样的查询请求:它不是使用准备好的查询或程序,而是 使用非参数特设的查询从数据库中请求数据。   不准备你的查询或者不使用存储过程会增加不必要的SQL Server计划缓存。什么是计划缓存呢?简单地说,它是SQL Server共享内存池的一部分,在这里,解析、编译和 执行优化这些查询之后,查询执行计划仍被保存。无论何时执行一个查询,内存的这个区域都会被查找,以便 确定现有的一个计划是否可以重新使用来满足一个查询请求。重新使用计划为数据库引擎节约了潜在的CPU密 集工作,例如,如果唯一的不同点是WHERE从句中正在使用的值,我们不得不一次又一次重新解析,重新编译 ,重新优化查询。这将导致查询响应时间加快,服务器中的CPU压力降低。  下面的Java代码片断提出一系 列非参数特设查询到AdventureWorks数据库中,以此来获得用户销售订单数据。它通过循环,从 AdventureWorks SalesOrderHeader表中前20张订单中获得信息。 图一  让我们用SQL Server 2005 DMVs来检验计划缓存中特设查询的效果。 注意:下面的查询输出结果被修改成只显示文本字段中的相应资料。  运行查询之后,我们可以从下面的图中 看到,每一个查询执行都在内存中存储了一个非常具体的计划,该计划没有参数化,也没有被数据库引擎重新 利用。因为这些计划是如此的具体,所以任何这些计划能够被重新使用的可能性很小。很容易看到,如果这是 一个使用频率非常高的应用程序,那么服务器内存会很快地消耗。   现在将调整Java代码来准备这个查询语 句。在执行之前,我通过命令DBCC FREEPROCCACHE清除该计划缓存,接着通过一个准备好的语句重新运行 java class: 重新审视这个计划缓存,我们可以看到,该查询已经成功编译并且重新用于所有的执行,因此有效地使用和保 存服务器内存和限制CPU使用。 现在,考虑到由于计划缓存是内存共享池的一部分,那么消除多余的计划可以为其他缓存腾出更多可用内存 ,从而使其他的缓存可以使用这个共享池,比如存储已经从硬盘中读取到内存中的数据和索引页的SQL Server数据缓存。  虽然相对于使用非参数特设的查询请求来说,准备好的查询是一种更好的方法,但是比 起这两种方法,我个人更偏向于使用存储过程。允许直接访问你的核心数据库表存在安全风险,通过存储过程 把数据从逻辑中抽取出来可以减少维护,并且当业务需求变化时,它也能够减少数据模型的变化。无论你选择 哪种数据访问方法,请记住通过确保你的查询计划是可以重复利用的,从而把你的应用程序从潜在的内存和 CPU问题中解救出来。 2008-12-4 15:46:39 疯狂代码 /

文档评论(0)

tcpe + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档