C军

不玩博客了!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2013年11月19日

摘要: 为了改进性能,分析重编译的起因很重要。往往,重编译可能并不需要,可以避免它以改进性能。了解导致重编译发生的不同条件有助于评估重编译的起因,并决定在重编译不必要时避免它的方法。 存储过程重编译在以下情况下发生:存储过程语句中引用的常规表、临时表或视图的架构变化。架构变化包括表的元数据或表上索引的变化;常规或临时表的列上的绑定(如默认/规则)变化。表索引或列上的统计的变化超过一定的阈值。存储过程编译时一个对象不存在,但是在执行期间创建(延迟对象解析);SET选项变化;执行计划老化并释放;对sp_recompile系统存储过程的显式调用。显式使用RECOMPILE子句; 可以在Profile... 阅读全文
posted @ 2013-11-19 16:40 逆心 阅读(5215) 评论(1) 推荐(4) 编辑

摘要: 存储过程通过明确地将查询的可变部分转换为参数来增进执行计划的可重用性。这使执行计划在查询以可变部分的相同或不同值重新提交时可以被重用。存储过程包含一组复杂的SQL语句,使生成存储过程的执行计划的代价有些高。因此,通常重用存储过程的执行计划来代替生成新计划是有利的。但是,有时候现有的计划可能不适用或者在重用期间可能不能提供最佳的处理策略。SQL Server重编译存储过程中的语句来生成一个新的执行计划,以解决这个问题。一、重编译的好处 存储过程的重编译既有好处又有缺点,有时候,为查询考虑一个新的处理策略而不是重用现有计划可能更经济。特别是表(或对应的统计)中数据的分布变化或者表中添加了新的... 阅读全文
posted @ 2013-11-19 15:35 逆心 阅读(3138) 评论(0) 推荐(0) 编辑

摘要: 计划缓冲的基本目的是通过重用执行计划来改进性能。因为,确认执行计划确实可重用很重要。因为即席查询的计划可重用性效率低下,所以一般建议尽可能依赖预定义工作负载技术。为了确保计划缓冲的高效实用,遵循以下建议。明确地参数化查询的可变部分;使用存储过程实现业务功能;使用sp_executesql避免存储过程维护;使用准备/执行模式避免重新发送查询字符串;避免即席查询;对动态查询使用sp_executesql代替EXECUTE;小心地参数化查询的可变部分;避免修改链接之间的环境设置;避免查询中对象的隐含解析;一、明确地参数化查询的可变部分 查询一般运行多次,每次运行的唯一不同是可变部分的不同值。它... 阅读全文
posted @ 2013-11-19 11:12 逆心 阅读(694) 评论(0) 推荐(0) 编辑

摘要: 查询计划hash和查询hash 在SQL Server 2008中引入的围绕执行计划和缓冲的新功能被称为查询计划hash和查询hash。这是使用针对查询或查询计划的算法来生成二进制hash值的二进制对象。 可以从sys.dm_exec_query_stats或sys.dm_exec_requests检索查询计划hash和查询hash。虽然这是确认查询及其计划的一种机制,但是hash值不是唯一的。不相似的查询可能得出相同的hash,所以不能将其作为备份主键。 分别创建两个查询如下:SELECT * FROM PersonHunderThousand INNER JOIN ProvinceO... 阅读全文
posted @ 2013-11-19 10:37 逆心 阅读(2063) 评论(0) 推荐(0) 编辑