应用对象
SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Standard

症状

假设你已在你的计算机上应用 Microsoft SQL Server 2012 Service Pack 2 (SP2)。 在sp_executesql存储过程中调用cdc.fn_cdc_get_net_changes_<Capture_instance>更改数据捕获(cdc)查询,它可能来自应用程序源,如 SQL server Management STUDIO 服务器(SSMS)、Cdc 自身或 sql Server Integration Services (SSIS)程序包。 在这种情况下,SQL Server 2012 中的性能很差。注意性能下降可能很大。 例如,在 SQL Server 2012 SP1 中,查询可以在几秒钟内完成。 但是,相同的查询可能需要几个小时才能在 SQL Server 2012 SP2 中运行。 此外,统计信息更新不能帮助解决此问题。

原因

出现此问题的原因在于基数估计中严重影响 cdc.fn_cdc_get_net_changes_<capture_instance>查询的性能的问题。

SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:

解决方法

若要解决此问题,请在查询中使用 选项(重新编译) 查询提示。 如果查询是从 SSIS CDC 组件触发的,则可以通过创建计划指南来强制执行 选项(重新编译) 提示,如下例所示:Exec sp_create_plan_guide @name = N'CDC_Query1_PlanGuide', @stmt = N'select [__$start_lsn],[__$operation],[__$update_mask],[Column1],[Column2],[Column3] from [cdc].[fn_cdc_get_net_changes_dbo_Table1](CONVERT(binary(10), @cs, 1), CONVERT(binary(10), @ce, 1), @mode)',@type = N'SQL',@module_or_batch = NULL, @params = N'@ce nvarchar(22),@mode nvarchar(14),@cs nvarchar(22)', @hints = N'OPTION (RECOMPILE)'; 注意您必须将示例查询替换为您遇到问题的查询。 它可以从 探查器 跟踪中抓取,因此不会意外添加任何额外字符。 此外,请确保选择 查询放置在单行中(例如,不应包含任何回车符或换行符),以便计划指南能够成功工作。 你可能还必须使用 DBCC FREEPROCCACHE 从缓存中挖空旧计划。

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。