Симптоми
Да предположим, че сте приложили Microsoft SQL Server 2012 Service Pack 2 (SP2) на компютъра си. Можете да се обадите на cdc.fn_cdc_get_net_changes_<capture_instance> промяна на заявката за УЛАВЯНЕ на данни (CDC) в съхранената sp_executesql процедура и то може да е от източник на приложения, като например сървър за управление на SQL Server (SSMS), CDC себе си или пакети за интегриране на SQL Server Services (SSIS). В тази ситуация ще имате лоша производителност в SQL Server 2012.Забележка Намаляване на производителността може да бъде голямо. Например заявката може да завърши за няколко секунди в SQL Server 2012 SP1. Същевременно една и съща заявка може да отнеме няколко часа, за да се изпълни в SQL Server 2012 SP2. Освен това актуализацията на статистиката не помага за проблема.
Причина
Този проблем възниква поради проблем в преценката за Кардинализъм, който силно влияе върху ефективността на cdc.fn_cdc_get_net_changes_<capture_instance> заявка.
Решение
Проблемът е коригиран първо в следващата сборна актуализация на SQL Server.
Кумулативна актуализация 3 за SQL Server 2012 SP2 /en-us/help/3002049
Всяка нова сборна актуализация за SQL Server съдържа всички поправки и всички корекции на защитата, които са били включени в предишната сборна актуализация. Вижте последните сборни актуализации за SQL Server:
Заобиколно решение
За да заобиколите този проблем, използвайте намек за опция (компилиране) на заявка във вашата заявка. В случай че заявката е активирана от компоненти на CDC на SSIS, може да бъде наложена опцията (компилиране) , като създадете ръководство за плана, както е в следния пример: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, които са посочени в секцията "важи за".