免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3729 | 回复: 0
打印 上一主题 下一主题

详解SQL Server 2008迁移查询计划 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-01 17:30 |只看该作者 |倒序浏览
本帖最后由 o阿浩o 于 2009-9-1 17:33 编辑

大多数情况下,将数据库升级到 SQL Server 2008 会提高查询性能。 但是,如果您具有已针对性能进行过认真优化的任务关键查询,在升级前最好为每个查询创建一个计划指南,以保留这些查询的查询计划。 如果在升级后,查询优化器为一个或多个查询选择了效率较低的计划,则可以启用这些计划指南并强制查询优化器使用升级前的计划。
若要在升级前创建计划指南,请按照以下步骤执行操作:
通过使用 sp_create_plan_guide 存储过程并在 USE PLAN 查询提示中指定查询计划来记录每个任务关键查询的当前计划。
验证计划指南是否适用于此查询
将数据库升级到 SQL Server 2008。
计划保留在升级后的数据库中的计划指南中,如果在升级后计划的性能出现退步,则这些计划将用作后备计划。
建议您在升级后不要启用计划指南,因为由于统计信息进行了更新,您可能会错过新版本中的更好计划或者重新编译所带来的益处。
如果在升级后选择了效率较低的计划,可以激活所有计划指南或部分计划指南以取代新计划。
示例
下面的示例显示如何通过创建计划指南来为查询记录升级前的计划。
步骤 1:收集计划
计划指南中记录的查询计划必须采用 XML 格式。 可通过以下方式生成 XML 格式的查询计划:
  1. SET SHOWPLAN_XML
  2. SET STATISTICS XML
复制代码
查询 sys.dm_exec_query_plan 动态管理函数的 query_plan 列。
SQL Server Profiler Showplan XML、Showplan XML Statistics Profile 和 Showplan XML For Query Compile 事件类。
下面的示例通过查询动态管理视图收集语句
  1. SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC; 的查询计划。USE AdventureWorks;
  2. GO
  3. SELECT query_plan
  4. FROM sys.dm_exec_query_stats AS qs
  5. CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
  6. CROSS APPLY sys.dm_exec_text_query_plan(qs.plan_handle, DEFAULT, DEFAULT) AS qp
  7. WHERE st.text LIKE N\'SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;%\';
  8. GO
复制代码
步骤 2:创建计划指南以强制实施计划
在计划指南中使用 XML 格式的查询计划(通过上述任一方法获取),将该查询计划作为字符串文字复制并粘贴在 sp_create_plan_guide 的 OPTION 子句中指定的 USE PLAN 查询提示中。
在 XML 计划本身中,先将计划中出现的引号 (\') 通过第二个引号进行转义,然后再创建计划指南。 例如,对于包含 WHERE A.varchar = \'This is a string\' 的计划,必须通过将该代码修改为 WHERE A.varchar = \'\'This is a string\'\' 来进行转义。
下面的示例为步骤 1 中收集的查询计划创建计划指南,并在 @hints 参数中插入此查询的 XML 显示计划。 为简洁起见,此示例中仅包括部分显示计划输出。
  1. EXECUTE sp_create_plan_guide
  2. @name = N\'Guide1\',
  3. @stmt = N\'SELECT City, StateProvinceID, PostalCode
  4. FROM Person.Address ORDER BY PostalCode DESC;\',
  5. @type = N\'SQL\',
  6. @module_or_batch = NULL,
  7. @params = NULL,
  8. @hints = N\'OPTION(USE PLAN N\'\'<ShowPlanXML xmlns=\'\'\'\'
  9. http://schemas.microsoft.com/sqlserver/2004/07/showplan\'\'\'\'
  10. Version=\'\'\'\'0.5\'\'\'\' Build=\'\'\'\'9.00.1116\'\'\'\'>
  11. <BatchSequence><Batch><Statements><StmtSimple>

  12. </StmtSimple></Statements></Batch>
  13. </BatchSequence></ShowPlanXML>\'\')\';
  14. GO
复制代码
步骤 3:验证计划指南是否适用于查询
再次运行查询,并检查生成的查询计划。 您应看到该计划与您在计划指南中指定的计划相符。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP