KB974006 – SQL Server-Hotfix für das Ablaufverfolgungsflag 4199 des Abfrageoptimierer-Wartungsmodells

Gilt für
Microsoft SQL Server 2005 Standard Edition Microsoft SQL Server 2005 Enterprise Edition Microsoft SQL Server 2005 Standard X64 Edition Microsoft SQL Server 2005 Enterprise X64 Edition Microsoft SQL Server 2005 Developer Edition Microsoft SQL Server 2005 Workgroup Edition SQL Server 2008 Standard SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Workgroup SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Express SQL Server 2008 R2 Standard SQL Server 2008 R2 Workgroup SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Express SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

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:

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