您的SQL数据库应用程序查询正在浪费内存吗?_SQL SERVER数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

您的SQL数据库应用程序查询正在浪费内存吗?[组图]

作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0

本篇关键词:浪费内存组图正在
黑客防线网安网讯:  或许在应用程序代码中找到的最常见的错误就是这样的查询请求:它不是使用准备好的查询或程序,而是使用非参数特设的查询从数据库中请求数据。   不准备你的查询或者不使用存储过程会增...

  或许在应用程序代码中找到的最常见的错误就是这样的查询请求:它不是使用准备好的查询或程序而是使用非参数特设的查询从数据库中请求数据

  不准备你的查询或者不使用存储过程会增加不必要的SQL Server计划缓存什么是计划缓存呢?简单地说它是SQL Server共享内存池的一部分,在这里,解析、编译和执行优化这些查询之后,查询执行计划仍被保存。无论何时执行一个查询,内存的这个区域都会被查找,以便确定现有的一个计划是否可以重新使用来满足一个查询请求。重新使用计划为数据库引擎节约了潜在的CPU密集工作,例如,如果唯一的不同点是WHERE从句中正在使用的值,我们不得不一次又一次重新解析,重新编译,重新优化查询。这将导致查询响应时间加快,服务器中的CPU压力降低。

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

图一

  让我们用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

  注意:下面的查询输出结果被修改成只显示文本字段中的相应资料。

  运行查询之后,我们可以从下面的图中看到,每一个查询执行都在内存中存储了一个非常具体的计划,该计划没有参数化,也没有被数据库引擎重新利用。因为这些计划是如此的具体,所以任何这些计划能够被重新使用的可能性很小。很容易看到,如果这是一个使用频率非常高的应用程序,那么服务器内存会很快地消耗。

图二

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-9960-1.html
网站维护教程更新时间:2012-03-21 02:28:07  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer