科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道细化解析:SQL Server2005查询计划指南

细化解析:SQL Server2005查询计划指南

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

如果应用程序数据库查询性能低下,而我们又无法获得源代码来修改查询文本,在不直接更改查询文本的前提下,怎样提高查询性能?

作者:赛迪网 Alice 来源:天新网 2008年4月24日

关键字: 数据库 Mssql SQL SQL Server

  • 评论
  • 分享微博
  • 分享邮件

代码的运作原理

@name = N'PlanGuideTest'

指定计划指南的名称为 PlanGuide1

@stmt = N'SELECT COUNT(*) AS Total FROM Sales.
SalesOrderHeader h, Sales.SalesOrderDetail d WHERE 
h.SalesOrderID = d.SalesOrderID and h.OrderDate 

BETWEEN "1/1/2000" AND "1/1/2005" '

这段代码是询问优化器应该匹配的代码。 无论应用程序何时向服务器发送这段代码,询问优化器设法匹配代码。当发现代码和上面列出的匹配时,查询优化器在内部查询表(loolup table)中查找正确的计划指南,并运用计划指南

@type = N'SQL',

说明计划指南的类型,这是一个 SQL 计划指南

@module_or_batch = NULL,


这个代码行用于指定statement_text对象的名字,仅在计划指南类型是OBJECT 计划指南时需要

@params = NULL,

指定嵌入 statement_text 中的所有参数的定义,在Template 计划指南类型时需要

@hints = N'OPTION (MERGE JOIN)'

指定将 OPTION 子句附加到与 @stmt 匹配的查询上

2.sp_control_plan_guide

删除、启用或禁用计划指南:

语法:

sp_control_plan_guide [ @operation = ] 
N'<control_option>' [ , [ @name = ] 
     N'plan_guide_name' ]

<control_option>::=

{ 

  DROP          --删除由plan_guide_name 指定的计划指南

  | DROP ALL     --删除当前数据库中的所有计划指南

  | DISABLE      --禁用由plan_guide_name 指定的计划指南

  | DISABLE ALL  --禁用当前数据库中的所有计划指南

  | ENABLE       --启用由plan_guide_name 指定的计划指南

  | ENABLE ALL   --启用当前数据库中的所有计划指南

下面是有些例子的是怎样使用这个存储过程:

sp_control_plan_guide N'DROP', N'PlanGuideTest' 
sp_control_plan_guide N'DISABLE', N'PlanGuideTest' 
sp_control_plan_guide N'ENABLE', N'PlanGuideTest'

注:如果您设法删除﹑修改﹑一个涉及到计划指南的存储过程﹑函数﹑或DML触发器, 它系统将报错。 必须先删除计划指南。

查看计划指南

可以使用sys.plan_guides目录视图查看数据库中的计划指南:

SELECT * FROM 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补丁后,需要重新评估计划指南的效率,

以确定是否继续使用计划指南。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章