详解SQL Server 2008迁移查询计划 |
|||
本文标签:查询 迁移 SQL Server 大多数情况下,将数据库升级到 SQL Server 2008 会提高查询性能 。 但是,如果您具有已针对性能进行过认真优化的任务关键查询,在升级前最好为每个查询创建一个计划指南,以保留这些查询的查询计划 。 如果在升级后,查询优化器为一个或多个查询选择了效率较低的计划,则可以启用这些计划指南并强制查询优化器使用升级前的计划 。 若要在升级前创建计划指南,请按照以下步骤执行操作: 通过使用 sp_create_plan_guide 存储过程并在 USE PLAN 查询提示中指定查询计划来记录每个任务关键查询的当前计划 。 验证计划指南是否适用于此查询 将数据库升级到 SQL Server 2008 。 计划保留在升级后的数据库中的计划指南中,如果在升级后计划的性能出现退步,则这些计划将用作后备计划 。 如果在升级后选择了效率较低的计划,可以激活所有计划指南或部分计划指南以取代新计划 。 示例 下面的示例显示如何通过创建计划指南来为查询记录升级前的计划 。 步骤 1:收集计划 计划指南中记录的查询计划必须采用 XML 格式 。 可通过以下方式生成 XML 格式的查询计划:
查询 sys.dm_exec_query_plan 动态管理函数的 query_plan 列 。 SQL Server Profiler Showplan XML、Showplan XML Statistics Profile 和 Showplan XML For Query Compile 事件类 。 下面的示例通过查询动态管理视图收集语句
步骤 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 显示计划 。 为简洁起见,此示例中仅包括部分显示计划输出 。
步骤 3:验证计划指南是否适用于查询 再次运行查询,并检查生成的查询计划 。 您应看到该计划与您在计划指南中指定的计划相符 。 |