Sintomas
Suponha que você tenha aplicado o Microsoft SQL Server 2012 Service Pack 2 (SP2) em seu computador. Você chama o cdc.fn_cdc_get_net_changes_<capture_instance> consulta de Data Capture (CDC) no sp_executesql procedimento armazenado, e ele pode vir de uma fonte de aplicativo, como o SQL Server Management Studio Server (SSMS), o próprio CDC ou os pacotes dos serviços de integração do SQL Server (SSIS). Nessa situação, você experimenta um desempenho ruim no SQL Server 2012.ObservaçãoA redução no desempenho pode ser grande. Por exemplo, uma consulta pode terminar em alguns segundos no SQL Server 2012 SP1. No entanto, a mesma consulta pode levar várias horas para ser executada no SQL Server 2012 SP2. Além disso, a atualização de estatísticas não ajuda com o problema.
Causa
Esse problema ocorre devido a um problema na estimativa de cardinalidade que afeta seriamente o desempenho do<de cdc.fn_cdc_get_net_changes_ capture_instance consulta> .
Resolução
O problema foi corrigido primeiro na atualização cumulativa a seguir do SQL Server.
Atualização cumulativa 3 para SQL Server 2012 SP2 /en-us/help/3002049
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes do SQL Server:
Solução alternativa
Para contornar esse problema, use a dica de consulta Option (RECOMPILE) em sua consulta. Caso a consulta seja disparada a partir de componentes CDC SSIS, a opção (RECOMPILE) pode ser forçada criando um guia de plano como no exemplo a seguir: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)'; ObservaçãoÉ necessário substituir a consulta de exemplo pela consulta com a qual você está enfrentando problemas. Ele pode ser capturado no rastreamento do gerador de perfil , portanto, nenhum caractere extra é adicionado acidentalmente. Além disso, certifique-se de que a consulta seleção seja colocada em uma única linha (por exemplo, ela não deve ter retorno de carro ou alimentação de linha) para que o guia de plano possa funcionar com êxito. Você também pode precisar usar DBCC FREEPROCCACHE para vazar o antigo plano do cache.
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".