KB4522127 – RJEŠENJE: loše performanse upita zbog procjene niske kardinalnosti u sustavu SQL Server 2016 kada koristite zadani CE, a stupac je pokriven statistikama s jednim ili više stupaca

Primjenjuje se na
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)

Simptomi

Pretpostavimo da pokrećete upit koji uključuje spajanje ili agregaciju na stupcu koji je pokriven statistikama o jednom stupcu ili s više njih (pri čemu taj stupac nije vodeći stupac). Ako koristite zadani procjenitelj kardinalnosti (CE) u sustavu SQL Server 2016, on može podcijeniti broj različitih redaka. To dovodi do neoptimalnog plana izvršenja upita (na primjer: niska procjena može uzrokovati nedovoljno dodjeljivanje memorije za operator raspršivanja, što uzrokuje prelijevanje upita na tempdb).

Status

Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku „Odnosi se na“.

Rješenje

Taj je problem riješen u sljedećem kumulativnom ažuriranju za SQL Server:

Napomena Da bi popravak stupio na snagu, morate omogućiti hitne popravke optimizatora upita pomoću mogućnosti Trace Flag (TF) 4199 ili odgovarajuće konfiguracije u opsegu baze podataka ili mogućnost podsjetnika za upit.

      

O kumulativnim ažuriranjima za SQL Server:

Svako novo kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sigurnosne popravke koji su obuhvaćeni prethodnim kumulativnim ažuriranjem. Pogledajte najnovija kumulativna ažuriranja za SQL Server:

Zaobilazno rješenje

Taj se problem može riješiti dodavanjem sljedećeg podsjetnika za upit:

USE HINT('FORCE_LEGACY_CARDINALITY_ESTIMATION')

Reference

Saznajte više o terminologiji koju Microsoft upotrebljava za opisivanje softverskih ažuriranja.