C军

不玩博客了!

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

随笔分类 -  SQLServer:执行计划

SQL Server执行计划
摘要:计划缓冲的基本目的是通过重用执行计划来改进性能。因为,确认执行计划确实可重用很重要。因为即席查询的计划可重用性效率低下,所以一般建议尽可能依赖预定义工作负载技术。为了确保计划缓冲的高效实用,遵循以下建议。明确地参数化查询的可变部分;使用存储过程实现业务功能;使用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) 编辑

摘要:当查询被提交时,SQL Server检查过程缓冲中匹配的执行计划,如果没有找到,SQL Server执行查询编译和优化以生成新的执行计划。 如果执行计划存在于缓冲中,它在私有的执行上下文中重用,这节约了CPU的编译和优化周期。 具有不同过滤条件的相同查询提交到SQL Server时,如:SELECT * FROM Person WHERE Id = 1 当这个查询被提交时,优化器创建一个执行计划并将其存储在过程缓冲中以被将来重用。如果这个查询使用不同的过滤条件,如:WHERE Id = 2重新提交,重用前面提供的过滤条件值所用的现有执行计划是有利的。但是为一个过滤条件值创建的执行计划... 阅读全文
posted @ 2013-11-13 23:19 逆心 阅读(3055) 评论(0) 推荐(3) 编辑

摘要:一、执行计划缓冲 优化器生成的执行计划保存在SQL Server内存池中的一个特别部分,被称为计划缓冲或过程缓冲。过程缓冲是SQL Server缓存的一部分。在缓冲中保存计划可使SQL Server避免在重新提交相同的查询时再次通过整个查询优化过程运行。SQL Server支持不同的技术,如:计划缓冲老化,计划缓冲类型来增加缓存的计划的可重用性。它还保存两个被称为hash和查询计划hash的二进制值。二、执行计划组件 优化器生成的执行计划包含两个组件:查询计划:这代表指定执行查询所需要的物理操作命令;执行上下文:这维护给定用户上下文中查询的可变部分; 1、查询计划 查询计划是一个可再入... 阅读全文
posted @ 2013-11-13 08:38 逆心 阅读(750) 评论(0) 推荐(0) 编辑

摘要:SQL Server使用许多技术来优化资源消耗:基于语法的查询优化;无用计划匹配以避免对简单查询的深度优化;根据当前分布统计的索引和连接策略;多阶段的查询优化以控制优化开销;执行计划缓冲以避免重新生成执行计划; 以上技术按以下顺序执行:解析器;代数化器;查询优化器;执行计划生成,缓冲和hash计划生成;查询执行; 其执行顺序如下: 一、解析器(parser) 当查询被提交时,SQL Server将它传递给关系引擎中的解析器。 关系引擎-负责解析、名称和类型解析、优化和按照查询执行计划执行查询并从存储引擎请求数据; 存储引擎-负责数据访问、修改、缓冲; 解析器检查进入的查询,验... 阅读全文
posted @ 2013-11-11 15:47 逆心 阅读(2000) 评论(0) 推荐(0) 编辑