运用计划缓冲的建议

原文:运用计划缓冲的建议

  计划缓冲的基本目的是通过重用执行计划来改进性能。因为,确认执行计划确实可重用很重要。因为即席查询的计划可重用性效率低下,所以一般建议尽可能依赖预定义工作负载技术。为了确保计划缓冲的高效实用,遵循以下建议。

  • 明确地参数化查询的可变部分;
  • 使用存储过程实现业务功能;
  • 使用sp_executesql避免存储过程维护;
  • 使用准备/执行模式避免重新发送查询字符串;
  • 避免即席查询;
  • 对动态查询使用sp_executesql代替EXECUTE;
  • 小心地参数化查询的可变部分;
  • 避免修改链接之间的环境设置;
  • 避免查询中对象的隐含解析;

一、明确地参数化查询的可变部分

  查询一般运行多次,每次运行的唯一不同是可变部分的不同值。它们的计划可以重用,但是,查询的静态和可变部分应该分离。虽然SQL Server有简单参数化和强制参数化特性,但是它们有各种局限性。应该始终使用标准的预定义工作负载结束明确地执行参数化。

二、使用存储过程实现业务功能

  如果已经明确地参数化查询,将它放置在存储过程中可能带来最好的可重用性。因为只需要发送参数和存储过程的名称,所以网络流量减少了。存储过程预先编译,它们运行得比即席查询快速。存储过程还能为包含在存储过程中的一组查询维护单一的参数化计划,而不是维护大量单独查询的小型计划。这避免了计划缓冲被单独查询的计划充满。

三、使用sp_executesql编程以避免存储过程维护

  如果考虑存储过程所需的对象维护,或者打算使用客户端生成的查询,则使用sp_executesql将查询作为预定义工作负载提交。和存储过程模式不同,sp_executesql不在数据库中创建持续性对象。sp_executesql适合执行单一的查询或小型批查询。在存储过程中实现完整的业务员逻辑还可使用sp_executesql作为一个大的查询串提交。但是,随着业务逻辑复杂性的增加,为整个逻辑创建并维护一个查询字符串将变得困难。

四、实现准备/执行模式以避免重传查询字符串

  sp_executesql需要在每次重新执行时通过网络发送查询字符串。它还需要服务器端查询字符串匹配,以确认对应执行计划在过程缓冲中的开销。在ODBC或OLEDB(OLEDB.NET)应用程序中,可以使用准备/执行模式以避免在多次执行中重传查询字符串,因为只需要提交计划句柄和参数。

  在准备/执行模式中,因为计划句柄返回给应用程序,该计划可以被其他用户连接重用--这并不仅限于创建该计划的用户。

五、避免即席查询

  不要使用即席查询设计新的应用程序。为即席查询创建的执行计划不能在查询以不同的可变部分值重新提交时重用。尽管SQL Server有简单参数化和强制参数化特性来隔离查询的可变部分,但因为SQL Server在参数化中的保守,这个特性只限于简单查询。为了更好的计划可重用性,将查询作为预定义工作负载提交。

六、对于动态查询sp_executesql优于EXECUTE

  在存储过程或数据库应用程序中动态生成的SQL查询字符串应该使用sp_executesql而不是EXECUTE命令执行。EXECUTE命令不允许查询的可变部分明确地参数化。

  如执行以下语句:

DECLARE @n VARCHAR(3)
SET @n = '678'
DECLARE @sql VARCHAR(MAX)
SET @sql = 'SELECT * FROM PersonTenThousand
INNER JOIN Province ON PersonTenThousand.PId = Province.Id
WHERE PersonTenThousand.Id = ' + @n + ''
EXECUTE (@sql)

  生成的是即席计划:

  

  而如果换成:

DECLARE @n NVARCHAR(3)
SET @n = 776
DECLARE @sql NVARCHAR(MAX),@param NCHAR(6)
SET @sql = 'SELECT * FROM PersonTenThousand INNER JOIN Province ON PersonTenThousand.PId = Province.Id WHERE PersonTenThousand.Id = @1'
SET @param = N'@1 INT'
EXECUTE sp_executesql @sql,@param,@1 = @n

  结果如下:

  

  我们看到,结果中生成了一个参数计划。

七、小心地参数化查询的可变部分

  在把查询的可变部分转换为参数时要小心。一些变量的取值范围可能急剧变化,以致某个计划的取值范围可能不适合于其他值,这可能导致参数嗅探。要根据情况的需要进行处理。

八、不要允许查询中对象的隐含解析

  SQL Server允许在不同的架构(Schema)下创建多个相同名称的数据库对象。

  例如,表t1可以使用两个不同架构(u1和u2)在单独的所有者下创建。大部分系统中默认的所有者是dbo(数据库所有者)。

  如果用户u1查询:

SELECT * FROM t1 WHERE c1 = 1

  SQL Server首先尝试查询用户u1默认架构下是否存在表t1。如果没有,则尝试查找dbo用户的表t1是否存在。这种隐含解析使用户u1可以在不同的架构下创建表t1的另一个实例,并且临时性访问它(使用相同的应用程序代码)而不影响其他用户。

在生产服务器上,建议使用架构所有者并且避免隐含解析。否则,使用隐含解析在生产服务器上将增加如下的开销:

  • 确认对象需要更多的时间;
  • 降低计划缓冲可重用性的效率;

 

时间: 2024-08-07 05:05:44

运用计划缓冲的建议的相关文章

防火墙采购计划的四点建议

防火墙作为网络安全体系的基础和核心控制设备,贯穿于受控网络通信主干线,它对通过受控干线的任何通信行为进行安全处理,同时也承担着繁重的通信任务.如何选用一个安全.稳定和可靠的防火墙产品,其重要性不言而喻.用户在选购时,应主要从以下五个方面仔细分析和比较. 第一 投资保护 考查开发商实力 随着安全技术的快速发展,防火墙软硬件需要经常升级和维护,因此,厂商的持续开发能力以及升级和维护能力非常重要.为了保证投资的有效性,在购买产品前应首先考察开发团队的规模和人员结构.开发时间.产品线组成.公司的规模.信

对百度原创火星计划的建议

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 今天我谈谈我对百度原创火星计划提出的几点建议 喜欢关注站长新闻的朋友肯定知道百度原创火星计划,此计划也是重点整治互联网上低质量的垃圾内容,提升内容优质的原创网站,但是有人网站使用采集软 件,采集文章,它能在你不经意间采集走你的文章,甚至快你一秒被百度收录,这里百度认为它的是原创了,自己的反而不收录了,怎么办?我的网站也是这样,所 以有的文章都

执行计划的生成

原文:执行计划的生成 SQL Server使用许多技术来优化资源消耗: 基于语法的查询优化: 无用计划匹配以避免对简单查询的深度优化: 根据当前分布统计的索引和连接策略: 多阶段的查询优化以控制优化开销: 执行计划缓冲以避免重新生成执行计划: 以上技术按以下顺序执行: 解析器: 代数化器: 查询优化器: 执行计划生成,缓冲和hash计划生成: 查询执行: 其执行顺序如下: 一.解析器(parser) 当查询被提交时,SQL Server将它传递给关系引擎中的解析器. 关系引擎-负责解析.名称和类

执行计划的重用

原文:执行计划的重用 当查询被提交时,SQL Server检查过程缓冲中匹配的执行计划,如果没有找到,SQL Server执行查询编译和优化以生成新的执行计划. 如果执行计划存在于缓冲中,它在私有的执行上下文中重用,这节约了CPU的编译和优化周期. 具有不同过滤条件的相同查询提交到SQL Server时,如: SELECT * FROM Person WHERE Id = 1 当这个查询被提交时,优化器创建一个执行计划并将其存储在过程缓冲中以被将来重用.如果这个查询使用不同的过滤条件,如:WHE

执行计划组件、组件、老化

原文:执行计划组件.组件.老化 一.执行计划缓冲 优化器生成的执行计划保存在SQL Server内存池中的一个特别部分,被称为计划缓冲或过程缓冲.过程缓冲是SQL Server缓存的一部分.在缓冲中保存计划可使SQL Server避免在重新提交相同的查询时再次通过整个查询优化过程运行.SQL Server支持不同的技术,如:计划缓冲老化,计划缓冲类型来增加缓存的计划的可重用性.它还保存两个被称为hash和查询计划hash的二进制值. 二.执行计划组件 优化器生成的执行计划包含两个组件: 查询计划

MRP生产计划的制定与物料需求计划属性

制定物料计划的方法较多,目前我司采用的主要方法包括MRP计划方法.库存计划方法以及特殊物料计划方法.不管哪种方法,基本步骤如确认需求来源.计划参数维护等是必不可少的.MRP计划方法主要包括计划参数和环境的维护.需求管理.制定主需求计划.主生产计划.物料需求计划等内容,计划制定过程主要依赖MRPII系统.而库存计划方法和特殊物料物料计划方法,更多是一种手工计划成分较多的计划方法,如何进行滚动计划排产及计划调整.库存计划和特殊物料计划.以及专项计划等主要方法及原则,同时对计划制定中容易出现的问题及一

windows任务计划执行结果0x0 0x1的意思与win2008系统计划任务用法介绍

最近遇见一个奇怪的现象,在做某系统的定期备份的时候使用到了非系统自带Rsync命令,但是手动启动没问题,而且又非常期望批量化在多台主机上进行,怎么办呢?Windows Server 2003下面这样执行任务计划没问题,而就Windows Server 2008 R2下面出现意外. 正常情况下我们的任务计划会有反馈数值,通过它可以判断这个任务计划上次是否运行正常 · 代码 0 或 0x0:操作成功完成. · 代码 1 或 0x1:调用的函数不正确或调用了未知函数. 如果文件不存在也会出现这个错误

如何明智地为初创企业聘请咨询顾问:依靠坚实的商业计划

你组建了自己的公司,这时你可能就要寻找咨询顾问了.在向企业外人士发出邀请,让他们为经营提供帮助之前,有些事情一定要注意,这能使你带着敬重之心来对待他们,珍惜他们的时间和专业知识.1. 依靠坚实的商业计划当你请一位咨询顾问帮你助推新公司的时候,他(她)很可能想看看你的商业计划书,以便更好地理解你进入某一特定市场的策略.比较理想的状态是,你已经制定了这类计划,说明你已经有了值得支持的想法,而且由此将会得到第一笔投资.你还可以聘请一位顾问帮你撰写计划(我为两家医疗保健方面的新创企业撰写了商业计划,那些

怎么样写好推广计划

在上个文章中,我和大家说了有关于SEO入职前的必须注意事项,我相信大家应该有所了解了.今天若林和大家探讨一下怎么样来写好我们的推广计划,推广计划也是我们SEOer必须要会学会的一项技能,首先我们来说一下推广计划包括了哪些内容. 了解企业推广计划必备要素:在这里我们要了解以下几个问题,A.我们的网站要实现哪些关键词的排名,预计要多少时间;B.我们可以用如些推推广方法来推广;C.我们的团队成员具体的工作安排是怎么样的;D.我们网站的推广预算是多少,它包括我们的网站建设,还包括百度竞价以及SEO,还有