加入收藏 | 设为首页 | 会员中心 | 我要投稿 网站开发网_马鞍山站长网 (https://www.0555zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

您的SQL Server应用程序查询正在浪费内存吗?

发布时间:2016-04-27 10:37:30 所属栏目:教程 来源:网络整理
导读:或许在应用程序代码中找到的最常见的错误就是这样的查询请求:它不是使用准备好的查询或程序, 而是使用非参数特设的查询从数据库中请求数据。 不准备你的查询
或许在应用程序代码中找到的最常见的错误就是这样的查询请求:它不是使用准备好的查询或程序, 而是使用非参数特设的查询从数据库中请求数据。

不准备你的查询或者不使用存储过程会增加不必要的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应用程序查询正在浪费内存吗?

图二

(编辑:网站开发网_马鞍山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!