使用 Microsoft 登录
登录或创建帐户。
你好,
使用其他帐户。
你有多个帐户
选择要登录的帐户。

症状

假设你已在你的计算机上应用 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 产品存在的问题。

需要更多帮助?

需要更多选项?

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

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?
按“提交”即表示你的反馈将用于改进 Microsoft 产品和服务。 你的 IT 管理员将能够收集此数据。 隐私声明。

谢谢您的反馈!

×