细化解析:SQL Server2005查询计划指南
来源:互联网 发布:java windows界面开发 编辑:程序博客网 时间:2024/05/22 12:52
问:如果应用程序数据库查询性能低下,而我们又无法获得源代码来修改查询文本,
在不直接更改查询文本的前提下,怎样提高查询性能?
答:SQL Server 2005引入了称为”计划指南”的新特性,可以帮解决上述问题。
原理:
1. 当应用程序向SQL Server发送代码,查询优化器首先检查在缓存中是否有一个适当的询问计划,如果有,查询就按被找到的查询计划执行。
2. 如果没有匹配的查询计划,代码将被与一个称为内部查寻表(lookup table)比较, 看是否有一个已存在的计划指南与之匹配。
3. 如果在第2步找到匹配的计划指南,询问优化器将修改源代码以包括计划指南中查询提示。源代码中之前的任何查询提示将被新提示替换。
4. 查询计划将被编译和缓存。
5. 查询将按照你之前在计划指南设定的查询提示执行。
计划指南的分类:
有三种方式的计划指南:
1.OBJECT 计划指南:与在 Transact-SQL 存储过程、标量函数、多语句表值函数和 DML 触发器的上下文中执行的查询匹配。
2.SQL 计划指南:与在独立的 Transact-SQL 语句和批处理(不属于数据库对象)的上下文中执行的查询匹配。基于 SQL 的计划指南还可用于与参数化为指定形式的查询匹配。SQL 计划指南适用于应用程序使用 sp_executeSQL 系统存储过程频繁提交的语句和批处理。
3.TEMPLATE 计划指南:与参数化为指定形式的独立查询匹配。这些计划指南用于覆盖查询类的数据库的当前 PARAMETERIZATION 数据库 SET 选项。TEMPLATE 计划指南用于覆盖特定查询形式的参数化行为。您可以在以下任一情况下创建 TEMPLATE 计划指南。
可以在计划指南使用中的查询提示:
使用示例:
以下二个存储过程创造和处理计划指南
1.sp_create_plan_guide
创建用于将查询提示与数据库中的查询进行关联的计划指南
语法:
示例
代码的运作原理
指定计划指南的名称为 PlanGuide1
这段代码是询问优化器应该匹配的代码。 无论应用程序何时向服务器发送这段代码,询问优化器设法匹配代码。当发现代码和上面列出的匹配时,查询优化器在内部查询表(loolup table)中查找正确的计划指南,并运用计划指南
说明计划指南的类型,这是一个 SQL 计划指南
这个代码行用于指定statement_text对象的名字,仅在计划指南类型是OBJECT 计划指南时需要
指定嵌入 statement_text 中的所有参数的定义,在Template 计划指南类型时需要
指定将 OPTION 子句附加到与 @stmt 匹配的查询上
2.sp_control_plan_guide
删除、启用或禁用计划指南:
语法:
下面是有些例子的是怎样使用这个存储过程:
注:如果您设法删除﹑修改﹑一个涉及到计划指南的存储过程﹑函数﹑或DML触发器, 它系统将报错。 必须先删除计划指南。
查看计划指南
可以使用sys.plan_guides目录视图查看数据库中的计划指南:
使用事件探查器验证是否执行计划指南:
1. 启动事件探查器 跟踪,选中”性能”->”Showplan XML” 事件类型。
2. 运行查询。
3. 在 Showplan XML 事件中查找受影响的查询。
4. 如果计划指南的类型为 OBJECT 或 SQL,则验证 Showplan XML 事件是否包含您希望与查询匹配的计划指南的 PlanGuideDB 和 PlanGuideName 属性。或者,如果计划指南的类型为 TEMPLATE,则验证 Showplan XML 事件是否包含预期计划指南的 TemplatePlanGuideDB 和 TemplatePlanGuideName 属性。这可以验证计划指南是否在运行。这些属性包含在计划的
计划指南通常使用的情况:
1. 在参数化的查询中增加OPTIMIZE FOR or RECOMPILE 询提示。
2. 用USE PLAN查询提示强制使用更好的查询计划。
3. 强迫非并行查询使用MAXDOP查询提示。
4. 强制join查询试验join查询提示。
5. 删除,修改,替代现有的查询提示。
最佳实践:
1. 计划指南的作用域是创建这些计划指南所用的数据库。
2. 计划指南需要有经验的DBA才能使用。
3. 如果没有其他方法来解决查询效率问题,请使用一个计划指南。
4. 计划指南需经过测试才正式使用。
5. SQL Server版本涉及或打SP补丁后,需要重新评估计划指南的效率,
以确定是否继续使用计划指南。
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>- 细化解析:SQL Server2005查询计划指南
- SQL server2005备份计划
- SQL Server 2005 查询计划指南
- SQL Server 2005 查询计划指南
- SQL server2005创建计划任务
- sql server2005查询优化建议
- sql server2005+ 分页查询汇总
- SQL server2005创建计划任务(转)
- SQL Server2005数据库查询中使用CTE
- Sql server2005优化查询速度51法
- Sql server2005优化查询速度51法
- SQL Server2005数据库查询中使用CTE
- Sql Server2005 导入查询结果到excel
- SQL Server2005 查询表列名 表说明
- sql server2005 运用cte实现递归查询
- sql server2005查询分析器显示行号方法
- sql server2005学习脚本4-数据查询
- sql server2005和oracle分页查询语句
- JavaScript 实现日历式日期选择
- 如何配置SQL Server来做远程备份?
- 如何使用Shell.Application技术
- 不要在SQL Server中盲目地追求一句处理
- 子父窗口之间的操作之小例子
- 细化解析:SQL Server2005查询计划指南
- 在客户端用JAVASCRIPT或VBSCRIPT生成WORD文档
- SQLServer悲观锁定和乐观锁定应用实例
- 一个短小精悍使用的对象化QQ菜单
- 解析SQL Server7.0的六种数据移动方法
- 装载页面进度条
- asp读sql数据时出现乱码问题的解决方法
- 下拉框联动
- 设计之美——极限反射之包装器