当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:21:00  来源:本站整理

SQL Server查询历程的内存实际损耗[MSSQL防范]

赞助商链接



  本文“SQL Server查询历程的内存实际损耗[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

  大概在利用程序代码中找到的最常见的错误就是这样的查询恳求:它不是利用预备好的查询或程序,而是利用非参数特设的查询从数据库中恳求数据.

  不预备你的查询大概不利用存储历程会增添不必要的sql server筹划缓存.什么是筹划缓存呢?简单地说,它是SQL Server同享内存池的一部份,在这里,解析、编译和履行优化这些查询之后,查询履行筹划仍被保存.无论什么时刻履行一个查询,内存的这个区域城市被查找,以便肯定现有的一个筹划能否可以重新利用来满意一个查询恳求.重新利用筹划为数据库引擎节俭了潜在的CPU密集工作,比方,假如唯一的差别点是WHERE从句中正在利用的值,我们不得不一次又一次重新解析,重新编译,重新优化查询.这将招致查询呼应时间加快,服务器中的CPU压力降低.

  下面的Java代码片断提出一系列非参数特设查询到AdventureWorks数据库中,以此来得到用户贩卖订单数据.它通过循环,从AdventureWorks SalesOrderHeader表中前20张订单中得到信息.

SQL Server查询历程的内存实际损耗
图一

  让我们用SQL Server 2005 DMVs来查验筹划缓存中特设查询的效果.

  select qs.usecounts, cacheobjtype, objtype, qt.text

  from sys.dm_exec_cached_plans qs

  cross apply sys.dm_exec_sql_text(qs.plan_handle) as qt

  order by qt.text

  go

  运行查询之后,我们可以从下面的图中看到,每一个查询履行都在内存中存储了一个非常具体的筹划,该筹划没有参数化,也没有被数据库引擎重新操纵.因为这些筹划是如此的具体,所以任何这些筹划可以被重新利用的大概性很小.很简单看到,假如这是一个利用频率非常高的利用程序,那么服务器内存会很快地损耗.

SQL Server查询历程的内存实际损耗
图二

  目前将调整Java代码来预备这个查询语句.在履行之前,我通过号令DBCC FREEPROCCACHE排除该筹划缓存,接着通过一个预备好的语句重新运行java class:

SQL Server查询历程的内存实际损耗
图三

  重新审视这个筹划缓存,我们可以看到,该查询已经成功编译并且重新用于全部的履行,因此有效地利用和保存服务器内存和限制CPU利用.

SQL Server查询历程的内存实际损耗
图四

  目前,考虑到由于筹划缓存是内存同享池的一部份,那么消除多余的筹划可认为其他缓存腾出更多可用内存,从而使其他的缓存可以利用这个同享池,比方存储已经从硬盘中读取到内存中的数据和索引页的SQL Server数据缓存.

  固然相关于利用非参数特设的查询恳求来说,预备好的查询是一种更好的办法,但是比起这两种办法,我个人更偏向于利用存储历程.答应直接拜候你的核心数据库表存在安全风险,通过存储历程把数据从逻辑中抽取出来可以削减保护,并且当业务需求改变时,它也可以削减数据模子的改变.无论你挑选哪类数据拜候办法,请记着通过确保你的查询筹划是可以反复操纵的,从而把你的利用程序从潜在的内存和CPU问题中解救出来.

大概在利用程序代码中找到的最常见的错误就是这样的查询恳求:它不是利用预备好的查询或程序,而是利用非参数特设的查询从数据库中恳求数据
  以上是“SQL Server查询历程的内存实际损耗[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • sqlserver索引的原理及索引成立的注意事项小结
  • SQL Join的一些总结(实例)
  • SQL的Join利用图解教程
  • SQL中JOIN和UNION辨别、用法及示例介绍
  • 关于SQL中CTE(公用表表达式)(Common Table Expression)的总结
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .