INLEDNING
Versioner av Microsoft SQL Server senare än SQL Server 2000 Service Pack 3 (SP3) levererade de flesta snabbkorrigeringar till frågeoptimeraren i ett off-by-by-default-tillstånd för att förhindra befintliga produktionskunder från att se förväntade planändringar som kan orsaka prestandaregressioner. Till en början levererades varje snabbkorrigering under en separat spårningsflagga. Senare ändrades denna praxis så att de flesta flaggor kombinerades under en enda spårningsflagga (4199). Den här nya metoden infördes i flera versioner och började med följande uppdateringar:
- SQL Server 2005 Service Pack 3 (SP3) Kumulativ uppdatering 6
- SQL Server 2008 Service Pack 1 (SP1) kumulativt uppdateringspaket 7
- SQL Server 2008 R2 (RTM)
Spårningsflagga 4199 användes för att samla in snabbkorrigeringar som var avsedda att bli aktiverade som standard i en framtida version, medan andra spårningsflaggor användes för situationer där en korrigering inte var avsedd att bli aktiverad som standard i aktuell form. Från och med SQL Server 2016 RTM används inställningen för databas COMPATIBILITY_LEVEL aktivera spårningsflagga 4199-relaterade snabbkorrigeringar som standard. I den här artikeln beskrivs mekaniken och policyn för hur planpåverkande snabbkorrigeringar levereras för SQL Server 2016 och senare versioner.
Mer information
I SQL Server 2016 kommer snabbkorrigeringar för spårningsflagga 4199 som görs i tidigare versioner av SQL Server att aktiveras under databas COMPATIBILITY_LEVEL 130 utan spårningsflagga 4199 aktiverat. Spårningsflagga 4199 används för att släppa eventuella framtida snabbkorrigeringar för SQL Server 2016 för databaser med hjälp av 130-kompatibilitetsnivån. Eftersom spårningsflagga 4199 endast rekommenderas för kunder som har specifika prestandaproblem rekommenderas kunderna att ta bort spårningsflagga 4199 när de har migrerat sina databaser till den senaste kompatibilitetsnivån eftersom spårningsflagga 4199 kommer att återanvändas för framtida korrigeringar som kanske inte gäller för ditt program och som kan orsaka oväntade ändringar i planens prestanda i ett produktionssystem. Det innebär att olika snabbkorrigeringar för Spårningsflagga 4199 är aktiverade för varje kompatibilitetsnivå som stöds i en viss produktversion. Den senaste kompatibilitetsnivån aktiverar redan alla tidigare korrigeringar under spårningsflagga 4199. Det innebär att om du uppgraderar en databas till den senaste kompatibilitetsnivån och tar bort spårningsflagga 4199 aktiveras fortfarande alla korrigeringar som en arbetsbelastning utnyttjade före databasuppgraderingen, men inte nya korrigeringar. Om kunder vid ett senare tillfälle får problem med frågeprestanda kan du experimentera med att aktivera alternativet QUERY_OPTIMIZER_HOTFIXES eller frågetipset ENABLE_QUERY_OPTIMIZER_HOTFIXES i en testmiljö för att se om problemen är lösta. Mer information om QUERY_OPTIMIZER_HOTFIXES finns i dokumentationen.
Anteckning Som standard använder databaser som skapas i SQL Server 2016 kompatibilitetsnivå 130 och har ny optimeringslogik redan aktiverad.
Den stora fördelen med denna modell är att den minskar risken för produktionssystem under uppgraderingsprocessen. Den här metoden separerar installationen av en ny huvudversion av SQL Server från den automatiska aktiveringen av alla nya ändringar i frågeprocessorn. Eftersom huvudversionsuppgraderingar ändrar filformatet och inte går att ångra är det en bra idé att använda inställningen COMPATIBILITY_LEVEL, eftersom den gör det möjligt för kunder att snabbt nedgradera om ett oväntat problem med planens prestanda upptäcks under en uppgradering. Om en kund hittar en oväntad planändring som blockerar en programuppgradering kan kunden underlätta situationen genom att tillämpa ett lämpligt plantips med hjälp av Query Store för att tvinga fram den tidigare planen, eller så kan kunden underlätta situationen genom att kontakta Microsoft Support för att få hjälp med problemet och tillhandahålla en lösning eller snabbkorrigering. När alla problem har åtgärdats kan uppgraderingen fortsätta. Kunder bör integrera den här funktionen i sin uppgraderingsplanering för SQL Server 2016.
Följande tabell förklarar modellen för hur spårningsflagga 4199 fungerar från och med SQL Server 2016.
| Inställning | SQL-kompatibilitetsnivå | Spårningsflagga 4199 | Snabbkorrigeringar för optimerare före SQL Server 2016 RTM | Snabbkorrigeringar för optimerare efter SQL Server 2016 RTM |
|---|---|---|---|---|
| 1. | 120 | Av | Inaktiverad | Inaktiverad |
| 2. | 120 | På | Aktiverat | Inaktiverad |
| 3. | 130 | Av | Aktiveras efter kompatibilitetsnivå | Inaktiverad |
| 4. | 130 | På | Aktiveras efter kompatibilitetsnivå | Aktiveras efter kompatibilitetsnivå |
Inställning nr 3 rekommenderas för kunder som nyligen uppgraderar till SQL Server 2016.
För större versioner efter SQL Server 2016 planerar Microsoft att fortsätta använda den här servicemodellen för snabbkorrigeringar för optimering. Som standard, eller i varje version, kommer eventuella snabbkorrigeringar för spårningsflagga 4199 från föregående version att aktiveras på nästa kompatibilitetsnivå. Det innebär att det rekommenderade tillståndet för kunder när de har migrerat till den senaste kompatibilitetsnivån är att ha spårningsflagga 4199 inaktiverat. Senare snabbkorrigeringar använde spårningsflagga 4199 för att aktivera korrigeringar för kunder som måste aktivera specifika snabbkorrigeringar i ett program. Kunder uppmanas att inaktivera spårningsflagga 4199 när ett program har uppgraderats till den senaste kompatibilitetsnivån för att undvika att oväntade framtida optimeringsändringar aktiveras för ett program oväntat. Uppgraderingen till den senaste kompatibilitetsnivån och borttagningen av spårningsflagga 4199 aktiverar fortfarande alla korrigeringar som en arbetsbelastning utnyttjade före uppgraderingen, men inte nya korrigeringar.
Anteckning Även om många optimeringssnabbkorrigeringar aktiveras under spårningsflagga 4199, använder vissa andra spårningsflaggor. Spårningsflagga 4199 Historiskt täckte spårningsflaggor som är allmänt tillämpliga och sannolikt kommer att aktiveras som standard i en framtida version. Alternativa spårningsflaggor används i snabbkorrigeringar där villkoren är mycket specifika för endast ett fåtal kunder, där korrigeringen kan orsaka prestandasänkningar i andra typer av program eller där de interna funktionerna kan se ändringar innan de är redo att aktiveras för alla. Microsoft fortsätter att använda andra spårningsflaggor efter behov för att underhålla produkten.
Anteckning Den här artikeln fokuserar på modellen för att släppa snabbkorrigeringar för spårningsflagga 4199 på den senaste kompatibilitetsnivån för den senaste produkten. (Vid publiceringstillfället är detta SQL Server 2016.) Snabbkorrigeringar för optimerare kan släppas på äldre marknadsversioner av SQL Server eller på lägre kompatibilitetsnivåer (120 eller tidigare) av SQL Server 2016. Microsoft utvärderar varje enskilt fall och avgör om spårningsflagga 4199 eller en annan spårningsflagga ska användas. Eftersom icke-snabbkorrigeringsändringar också aktiveras när en övergång görs till en senare kompatibilitetsnivå, finns det inget specifikt löfte om att inga planändringar kommer att ske under en uppgradering (med eller utan spårningsflagga 4199). Kunder bör alltid testa ändringar av kompatibilitetsnivån noggrant för produktionsprogram och bör använda riskreduceringstekniker, till exempel Query Store, om det finns ett prestandaproblem relaterat till planval.
Som referens användes följande spårningsflaggor för snabbkorrigeringar för frågeprocessorn innan spårningsflagga 4199 introducerades:
4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4115, 4116, 4117, 4119, 4120, 4121, 4122, 4124, 4125, 4126, 4127, 4128, 4129, 4131, 4133, 4135.
SQL Server 2012 och senare versioner
Spårningsflagga 4199 ingår i versionsversionerna av SQL Server 2012 och senare versioner.
Aktivera spårningsflagga 4199
Du kan aktivera spårningsflagga 4199 vid start eller i en användarsession. Den här spårningsflaggan har effekt på antingen global nivå eller sessionsnivå. Om du vill aktivera spårningsflagga 4199 använder du kommandot DBCC TRACEON eller använder –T 4199 som startparameter.
Om DBCC TRACEON\TRACEOFF används återskapas inte en ny cachelagrad plan för lagrade procedurer. Planer som har skapats utan spårningsflaggan kan finnas i cacheminnet.
Detaljerad information om hur du aktiverar eller inaktiverar spårningsflaggor och förklaringar av spårningsflaggor på global nivå och sessionsnivå finns i följande avsnitt i SQL Server Books Online:
- DBCC TRACEON (Transact-SQL)
- Anvisningar: Konfigurera alternativ för serverstart (Konfigurationshanteraren för SQL Server)
Referenser
Om du vill veta mer om namnschemat för SQL Server uppdateringar klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
822499
Nytt namngivningsschema för Microsoft SQL Server programuppdateringspaket
Om du vill veta mer om terminologi för programuppdateringar klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
824684
Beskrivning av standardterminologin som används för att beskriva Microsofts programuppdateringar