Ознаки
Припустимо, що на комп'ютері застосовано Microsoft SQL Server 2012 із пакетом оновлень 2 (SP2). Ви телефонуєте на cdc.fn_cdc_get_net_changes_<capture_instance> змінити запит на передавання даних (CDC) у sp_executesql збережену процедуру, і вона може виходити з джерела програми, наприклад на сервері SQL Server Server (ssms), CDC самостійно або пакетів служб інтеграції SQL Server (ssms). У цій ситуації ви відчуєте низьку продуктивність у 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:
Інші способи вирішення
Щоб вирішити цю проблему, скористайтеся підказкою запиту (Перекомпіленним) у запиті. У випадку, якщо запит запущено з компонентів 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)'; Примітка.Потрібно замінити приклад запиту з запитом, з яким ви зіткнулися з цією проблемою. Його можна схопив з трасування Profiler , тому не випадково додається додатковий символ. Крім того, переконайтеся, що запит на вибірку буде поставлено в один рядок (наприклад, у ньому не повинно бути будь-якого повернутого або лінійного каналу), щоб посібник із планування може успішно працювати. Можливо, вам також доведеться використовувати DBCC FREEPROCCACHE , щоб вибити старий план із кеша.
Стан
Корпорація Майкрософт підтвердила, що це проблема в продуктах Microsoft, перелічених у розділі "застосовується до".