KB4522127. ВИПРАВЛЕННЯ. Низька продуктивність запитів через низьку оцінку кількості рядків у SQL Server 2016 р., якщо використовується СЕ за замовчуванням і стовпець охоплюється статистикою як для одного, так і для кількох стовпців

Застосовується до
SQL Server 2016 Service Pack 2 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

Ознаки

Припустімо, що ви виконуєте запит із залученням об'єднання або агрегації до стовпця, який охоплюється статистикою як з одного, так і з кількох стовпців (причому цей стовпець не є початковим). Якщо ви використовуєте стандартне Cardinality Estimator (CE) у SQL ServerSQL Server 2016, він може недооцінювати кількість окремих рядків. Це призводить до неоптимального плану виконання запитів (наприклад: низька оцінка може спричинити недостатній обсяг пам'яті для хеш-оператора, що спричиняє розгортання запиту до tempdb).

Стан

Корпорація Microsoft підтвердила, що це одна з проблем з продуктами Microsoft, перелічених у розділі "Застосовується до".

Спосіб усунення проблеми

Цю проблему вирішено в такому сукупному оновленні для SQL Server:

Примітка Щоб це виправлення набуло сили, потрібно активувати поточні виправлення в оптимізаторі запитів за допомогою позначки трасування (TF) 4199 або відповідної конфігурації на рівні бази даних чи параметра підказки запиту.

      

Відомості про сукупні оновлення для SQL ServerSQL Server :

Кожне нове сукупне оновлення для SQL Server містить усі виправлення та виправлення системи безпеки, які входили до попереднього сукупного пакета оновлень. Перегляньте останні сукупні оновлення для SQL Server.

Спосіб вирішення

Цю проблему можна виправити, додавши таку підказку запиту:

USE HINT('FORCE_LEGACY_CARDINALITY_ESTIMATION')

Посилання

Дізнайтеся, за допомогою яких термінів корпорація Майкрософт описує оновлення програмного забезпечення.