Ознаки
У Microsoft SQL ServerSQL Server 2016 або SQL ServerSQL Server 2017 у Windows продуктивність може знижуватися за таких умов:
- У разі одночасного виконання кількох одночасних операцій INSERTSELECT у тимчасових таблицях.
- Під час створення запиту sys.dm_os_waiting_tasks. У цій ситуації стовпець resource_description відображає очікування на сторінках PFS для кількох запитів.
Причина
Паралелізм INSERT для операцій INSERTSELECT запроваджено в SQL ServerSQL Server 2016 або SQL ServerSQL Server 2017 у Windows. Вкладиші в локальні тимчасові таблиці (лише ті, що визначені префіксом #, а не глобальні тимчасові таблиці, визначені префіксами ##) тепер автоматично вмикаються для паралелізму без необхідності позначати підказку TABLOCK, як це необхідно для нетимчасових таблиць.
Хоча паралелізм INSERT зазвичай підвищує продуктивність запитів, за наявності значної кількості одночасних тимчасових операцій таблиці INSERTSELECT, суперечки можуть бути значними для сторінок PFS. У деяких випадках це може призвести до загального зниження працездатності.
Спосіб усунення проблеми
Вперше цю проблему вирішено в SQL Server 2016 році з пакетом оновлень 1. After you applied SQL ServerSQL Server 2016 SP1, Parallel INSERTs in INSERT.. За замовчуванням функцію SELECT до локальних тимчасових таблиць вимкнуто, що зменшує кількість суперечок на сторінці PFS та підвищує загальну продуктивність одночасного навантаження. Якщо потрібні паралельні ВСТАВКИ до локальних тимчасових таблиць, користувачам слід використовувати підказку TABLOCK під час вставки в локальну тимчасову таблицю.
Якщо ввімкнуто позначку трасування 9495, згадану в розділі про тимчасове вирішення, рекомендується вимкнути та видалити позначку трасування після застосування SQL Server 2016 із пакетом оновлень 1 (SP1), оскільки позначка трасування 9495 вимикає паралельну вставку, незалежно від підказки TABLOCK.
Сукупні відомості про оновлення
Цю проблему вирішено в такому сукупному оновленні для SQL ServerSQL Server 2016:
Відомості про сукупні оновлення для SQL ServerSQL Server