EINFÜHRUNG
Versionen von Microsoft SQL Server höher als SQL Server 2000 Service Pack 3 (SP3) lieferten die meisten Hotfixes standardmäßig an den Abfrageoptimierer, um zu verhindern, dass vorhandene Produktionskunden erwartete Planänderungen sehen, die zu Leistungsregressionen führen könnten. Zunächst wurde jeder Hotfix unter einem separaten Ablaufverfolgungsflag bereitgestellt. Später wurde diese Vorgehensweise geändert, sodass die meisten Flags unter einem einzigen Ablaufverfolgungsflag kombiniert wurden (4199). Diese neue Methode wurde über mehrere Versionen hinweg initiiert, beginnend mit den folgenden Updates:
- kumulatives Update 6 für SQL Server 2005 Service Pack 3 (SP3)
- kumulatives Updatepaket 7 von SQL Server 2008 Service Pack 1 (SP1)
- SQL Server 2008 R2 (RTM)
Das Ablaufverfolgungsflag 4199 wurde verwendet, um Hotfixes zu sammeln, die in einer zukünftigen Version standardmäßig aktiviert werden sollten, während andere Ablaufverfolgungsflags für Situationen verwendet wurden, in denen ein Fix nicht standardmäßig in der aktuellen Form aktiviert werden sollte. Ab SQL Server 2016 RTM wird die Einstellung für die Datenbank COMPATIBILITY_LEVEL verwendet, um das Ablaufverfolgungsflag 4199-bezogene Hotfixes standardmäßig zu aktivieren. In diesem Artikel werden die Mechanismen und Richtlinien zur Übermittlung von Hotfixes, die sich auf den Plan auswirken, für SQL Server 2016 und höhere Versionen beschrieben.
Weitere Informationen
In SQL Server 2016 werden Ablaufverfolgungsflag 4199-Hotfixes, die für frühere Versionen von SQL Server erstellt wurden, unter Datenbank COMPATIBILITY_LEVEL 130 aktiviert, ohne dass das Ablaufverfolgungsflag 4199 aktiviert ist. Das Ablaufverfolgungsflag 4199 wird verwendet, um zukünftige SQL Server 2016-Hotfixes für Datenbanken mithilfe des Kompatibilitätsgrads 130 zu veröffentlichen. Da das Ablaufverfolgungsflag 4199 nur für Kunden empfohlen wird, bei denen bestimmte Leistungsprobleme auftreten, wird Kunden empfohlen, das Ablaufverfolgungsflag 4199 zu entfernen, nachdem sie ihre Datenbanken auf den neuesten Kompatibilitätsgrad migriert haben, da das Ablaufverfolgungsflag 4199 für zukünftige Korrekturen wiederverwendet wird, die möglicherweise nicht für Ihre Anwendung gelten und zu unerwarteten Änderungen der Planleistung auf einem Produktionssystem führen könnten. Dies bedeutet, dass für jeden Kompatibilitätsgrad, der in einem bestimmten Produktrelease unterstützt wird, unterschiedliche Ablaufverfolgungsflag 4199-Hotfixes aktiviert sind. Der neueste Kompatibilitätsgrad ermöglicht bereits alle vorherigen Korrekturen unter dem Ablaufverfolgungsflag 4199. Dies bedeutet, dass das Aktualisieren einer Datenbank auf den neuesten Kompatibilitätsgrad und das Entfernen des Ablaufverfolgungsflags 4199 weiterhin alle Fixes ermöglicht, die eine Workload vor dem Datenbankupgrade genutzt hat, nur keine neuen Fixes. Wenn zu einem späteren Zeitpunkt Probleme mit der Abfrageleistung auftreten, experimentieren Sie mit der Aktivierung der datenbankbezogenen Option QUERY_OPTIMIZER_HOTFIXES oder Abfragehinweisen ENABLE_QUERY_OPTIMIZER_HOTFIXES in einer Testumgebung, um zu ermitteln, ob die Probleme behoben sind. Weitere Informationen finden Sie in der Dokumentation zu QUERY_OPTIMIZER_HOTFIXES.
Hinweis Standardmäßig verwenden Datenbanken, die in SQL Server 2016 erstellt werden, den Kompatibilitätsgrad 130, und die neue Optimiererlogik ist bereits aktiviert.
Der Hauptvorteil dieses Modells besteht darin, dass es das Risiko für Produktionssysteme während des Upgradeprozesses reduziert. Dieser Ansatz trennt die Installation einer neuen Hauptversion von SQL Server von der automatischen Aktivierung aller neuen Änderungen des Abfrageprozessors. Da Upgrades von Hauptversionen das Dateiformat ändern und nicht umkehrbar sind, empfiehlt es sich, die Einstellung COMPATIBILITY_LEVEL zu verwenden, da ein Kunde so schnell herabstufen kann, wenn während eines Upgrades ein unerwartetes Leistungsproblem bei einem Plan gefunden wird. Wenn ein Kunde eine unerwartete Planänderung findet, die ein Anwendungsupgrade blockiert, kann der Kunde die Situation vereinfachen, indem er einen geeigneten Planhinweis anwendet, indem er den Abfragespeicher verwendet, um den vorherigen Plan zu erzwingen. Alternativ kann er sich an den Microsoft-Kundensupport wenden, um das Problem zu beheben und eine Problemumgehung oder einen Hotfix bereitzustellen. Wenn alle Probleme verringert werden, kann das Upgrade fortgesetzt werden. Kunden sollten diese Funktion in ihre Upgradeplanung für SQL Server 2016 integrieren.
In der folgenden Tabelle wird das Modell für die Funktionsweise des Ablaufverfolgungsflags 4199 ab SQL Server 2016 erläutert.
| Einstellung | SQL-Kompatibilitätsgrad | Ablaufverfolgungsflag 4199 | Optimierer-Hotfixes vor SQL Server 2016 RTM | Optimierer-Hotfixes nach SQL Server 2016 RTM |
|---|---|---|---|---|
| 1. | 120 | Aus | Disabled | Disabled |
| 2. | 120 | Ein | Aktiviert | Disabled |
| 3. | 130 | Aus | Aktiviert durch Kompatibilitätsgrad | Disabled |
| 4. | 130 | Ein | Aktiviert durch Kompatibilitätsgrad | Aktiviert durch Kompatibilitätsgrad |
Hinweis Einstellung Nr. 3 wird für Kunden empfohlen, die ein Upgrade auf SQL Server 2016 durchführen.
Für Hauptversionen nach SQL Server 2016 plant Microsoft, dieses Wartungsmodell weiterhin für Optimierer-Hotfixes zu verwenden. Standardmäßig oder bei jedem Release werden alle Ablaufverfolgungsflag 4199-Hotfixes aus der vorherigen Version im nächsten Kompatibilitätsgrad aktiviert. Dies bedeutet, dass der empfohlene Status für Kunden nach der Migration zum neuesten Kompatibilitätsgrad darin bestehen wird, das Ablaufverfolgungsflag 4199 deaktiviert zu haben. Spätere Hotfixes verwenden das Ablaufverfolgungsflag 4199, um Korrekturen für Kunden zu ermöglichen, die diese spezifischen Hotfixes in einer Anwendung aktivieren müssen. Kunden wird empfohlen, das Ablaufverfolgungsflag 4199 zu deaktivieren, nachdem eine Anwendung auf den neuesten Kompatibilitätsgrad aktualisiert wurde, um zu vermeiden, dass unerwartete zukünftige Optimiereränderungen für eine Anwendung unerwartet aktiviert werden. Dieses Upgrade auf den neuesten Kompatibilitätsgrad und das Entfernen des Ablaufverfolgungsflags 4199 ermöglicht weiterhin alle Fixes, die eine Workload vor dem Upgrade genutzt hat, nur keine neuen Fixes.
Hinweis Während viele Optimierer-Hotfixes unter dem Ablaufverfolgungsflag 4199 aktiviert sind, verwenden einige andere Ablaufverfolgungsflags. Ablaufverfolgungsflag 4199 deckte in der Vergangenheit Ablaufverfolgungsflags ab, die allgemein anwendbar sind und wahrscheinlich in einer zukünftigen Version standardmäßig aktiviert werden. Alternative Ablaufverfolgungsflags werden in Hotfixes verwendet, bei denen die Bedingungen nur für wenige Kunden sehr spezifisch sind, wobei die Korrektur leistungsregressionen in anderen Arten von Anwendungen verursachen kann oder wenn die interne Funktionalität Änderungen sehen kann, bevor sie für alle benutzer aktiviert werden kann. Microsoft verwendet bei Bedarf weitere Ablaufverfolgungsflags, um das Produkt zu bedienen.
Hinweis Dieser Artikel konzentriert sich auf das Modell für die Veröffentlichung von Ablaufverfolgungsflag 4199-Hotfixes für den neuesten Kompatibilitätsgrad des neuesten Produkts. (Zum Zeitpunkt der Veröffentlichung ist dies SQL Server 2016.) Optimierer-Hotfixes können auf älteren marktinternen Versionen von SQL Server oder auf niedrigeren Kompatibilitätsgraden (120 oder früher) von SQL Server 2016 veröffentlicht werden. Microsoft wertet jeden Fall aus und bestimmt, ob ablaufverfolgungsflag 4199 oder ein anderes Ablaufverfolgungsflag verwendet werden soll. Da Änderungen ohne Hotfix auch aktiviert werden, wenn eine Verschiebung auf einen späteren Kompatibilitätsgrad vorgenommen wird, gibt es keine spezifische Zusage, dass während eines Upgrades keine Planänderungen vorgenommen werden (mit oder ohne Ablaufverfolgungsflag 4199). Kunden sollten Änderungen am Kompatibilitätsgrad für Produktionsanwendungen immer sorgfältig testen und Entschärfungstechnologien wie die Abfragespeicher verwenden, wenn ein Leistungsproblem im Zusammenhang mit der Planauswahl vorliegt.
Zur Referenz wurden die folgenden Ablaufverfolgungsflags vor der Einführung des Ablaufverfolgungsflags 4199 für Hotfixes des Abfrageprozessors verwendet:
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 und höher
Das Ablaufverfolgungsflag 4199 ist in den Releaseversionen von SQL Server 2012 und höheren Versionen enthalten.
Aktivieren des Ablaufverfolgungsflags 4199
Sie können das Ablaufverfolgungsflag 4199 beim Start oder in einer Benutzersitzung aktivieren. Dieses Ablaufverfolgungsflag wirkt sich entweder auf globaler Ebene oder auf Sitzungsebene aus. Verwenden Sie zum Aktivieren des Ablaufverfolgungsflags 4199 den Befehl DBCC TRACEON oder –T 4199 als Startparameter.
Wenn DBCC TRACEON\TRACEOFF verwendet wird, wird dadurch kein neuer zwischengespeicherter Plan für gespeicherte Prozeduren neu generiert. Pläne können sich im Cache befinden, die ohne das Ablaufverfolgungsflag erstellt wurden.
Ausführliche Informationen zum Aktivieren oder Deaktivieren von Ablaufverfolgungsflags sowie Erläuterungen zu globalen ablaufverfolgungsflags und Ablaufverfolgungsflags auf Sitzungsebene finden Sie in den folgenden Themen in der SQL Server-Onlinedokumentation:
- DBCC TRACEON (Transact-SQL)
- Vorgehensweise: Konfigurieren von Serverstartoptionen (SQL Server-Konfigurations-Manager)
Referenzmaterial
Wenn Sie weitere Informationen zum Benennungsschema für SQL Server Updates erhalten möchten, klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
822499
Neues Benennungsschema für Microsoft SQL Server Softwareupdatepakete
Weitere Informationen zur Terminologie für Softwareupdates von Microsoft finden Sie im folgenden Artikel der Microsoft Knowledge Base:
824684
Erläuterung von Standardbegriffen bei Microsoft-Softwareupdates