您的SQL Server应用程序查询正在浪费内存吗?
或许在应用程序代码中找到的最常见的错误就是这样的查询请求:它不是使用准备好的查询或程序, 而是使用非参数特设的查询从数据库中请求数据。
不准备你的查询或者不使用存储过程会增加不必要的SQL Server计划缓存。什么是计划缓存呢?简单 地说,它是SQL Server共享内存池的一部分,在这里,解析、编译和执行优化这些查询之后,查询执行 计划仍被保存。无论何时执行一个查询,内存的这个区域都会被查找,以便确定现有的一个计划是否可 以重新使用来满足一个查询请求。重新使用计划为数据库引擎节约了潜在的CPU密集工作,例如,如果唯 一的不同点是WHERE从句中正在使用的值,我们不得不一次又一次重新解析,重新编译,重新优化查询。 这将导致查询响应时间加快,服务器中的CPU压力降低。 下面的Java代码片断提出一系列非参数特设查询到AdventureWorks数据库中,以此来获得用户销售订 单数据。它通过循环,从AdventureWorks SalesOrderHeader表中前20张订单中获得信息。 图一 让我们用SQL Server 2005 DMVs来检验计划缓存中特设查询的效果。
注意:下面的查询输出结果被修改成只显示文本字段中的相应资料。 运行查询之后,我们可以从下面的图中看到,每一个查询执行都在内存中存储了一个非常具体的计划 ,该计划没有参数化,也没有被数据库引擎重新利用。因为这些计划是如此的具体,所以任何这些计划 能够被重新使用的可能性很小。很容易看到,如果这是一个使用频率非常高的应用程序,那么服务器内 存会很快地消耗。 图二 (编辑:宁德站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 微软产品遇空前信任危机 逾66%用户表示不满
- sql-server-2012 – 如何卸载SQL Server Management Studio
- sql-server – 增加的网络延迟会导致MS SQL Server中的表锁
- 一步步教你配置SQL SERVER合并复制(四)提高Distributor的
- HTML使用相对路径获取各级目录下文件方式详解
- 金山WPS新品正式定名 办公软件市场上演龙虎斗
- 如果我们在sql-server中启用read committed snapshot会有什
- 是炫耀技术?两国产病毒攻破微软NT系统底层
- “货”出有因!ORBBIT光储出货量全线彪升
- sql-server – coldfusion,iis7,sql server管理员有哪些日常