Síntomas
Suponga que ha aplicado el Service Pack 2 (SP2) de Microsoft SQL Server 2012 en el equipo. Puede llamar a los cdc.fn_cdc_get_net_changes_<capture_instance> consulta de captura de datos (CDC) en el procedimiento almacenado sp_executesql y puede proceder de un origen de la aplicación, como SQL Server Management Studio Server (SSMS), CDC o los paquetes de SQL Server Integration Services (SSIS). En esta situación, experimenta un bajo rendimiento en SQL Server 2012.Nota: La disminución de rendimiento podría ser grande. Por ejemplo, una consulta puede finalizar en unos segundos en SQL Server 2012 SP1. Sin embargo, la misma consulta puede demorar varias horas en ejecutarse en SQL Server 2012 SP2. Además, la actualización de estadísticas no es útil para solucionar el problema.
Causa
Este problema se produce debido a un problema en el cálculo de cardinalidad que afecta gravemente al rendimiento de la cdc.fn_cdc_get_net_changes_<capture_instance> consulta.
Resolución
El problema se solucionó por primera vez en la siguiente actualización acumulativa de SQL Server.
Actualización acumulativa 3 para SQL Server 2012 SP2 /en-us/help/3002049
Cada actualización acumulativa para SQL Server contiene todas las revisiones y todas las revisiones de seguridad incluidas en la actualización acumulativa anterior. Consulte las últimas actualizaciones acumulativas para SQL Server:
Solución alternativa
Para solucionar este problema, use la sugerencia de consulta Option (RECOMPILE) en la consulta. En caso de que la consulta se desencadene desde componentes de CDC de SSIS, la sugerencia Option (RECOMPILE) puede forzarse mediante la creación de una guía de plan como en el ejemplo siguiente: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)'; Nota: Tiene que reemplazar la consulta de ejemplo con la consulta en la que está enfrentando el problema. Se puede capturar de la traza del analizador , por lo que no se agrega ningún carácter adicional por accidente. Además, asegúrese de que la consulta de selección se coloca en una sola línea (por ejemplo, no debería tener ningún retorno de carro ni salto de línea) para que la guía de plan pueda funcionar correctamente. Es posible que también tenga que usar DBCC FREEPROCCACHE para derribar el plan antiguo de la caché.
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft recogidos en la sección "Se aplica a".