KB3189813 – Update führt in SQL Server 2016 das Abfragehinweisargument VERWENDEN ein

Gilt für
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 Express - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Web - duplicate (do not use)

Zusammenfassung

Mit diesem Update wird das neue Abfragehinweisargument USE HINT, eingeführt, mit dem Sie den Abfrageoptimierer ohne erhöhte Anmeldeinformationen oder ohne Mitglied der Serverrolle "sysadmin" steuern können. Die Syntax dieses neuen Abfragehinweises sieht etwa wie folgt aus:

<query_hint > ::=
{
USE HINT(N'key' [ [, ]...n ])
}

      

Mit diesem Update werden außerdem die folgenden Hinweisoptionen eingeführt, die mit dem Argument HINWEIS VERWENDEN verwendet werden können.

Option Entsprechendes Ablaufverfolgungsflag Beschreibung Gültigkeitsbereich
ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS TF 9476 Bewirkt, dass SQL Server einen Abfrageplan unter Verwendung der einfachen Containment-Annahme anstelle der standardmäßigen Basis-Containment-Annahme für Joins unter dem Kardinalitätsschätzungsmodell des Abfrageoptimierers von SQL Server 2014 (12.x) oder höher generiert.
ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES TF 4137 Veranlasst, dass SQL Server einen Plan mit minimaler Selektivität bei der Schätzung UND Prädikaten für Filter generiert, um die Korrelation zu berücksichtigen. Dieser Hinweisname ist parallel zum Ablaufverfolgungsflag 4137, wenn es mit dem Kardinalitätsschätzungsmodell von SQL Server 2012 (11.x) und früheren Versionen verwendet wird, und hat ähnliche Auswirkungen, wenn das Ablaufverfolgungsflag 9471 mit dem Kardinalitätsschätzungsmodell von SQL Server 2014 (12.x) oder höher verwendet wird.
DISABLE_BATCH_MODE_ADAPTIVE_JOINS Deaktiviert adaptive Joins im Batchmodus. ab SQL Server 2017
DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK Deaktiviert das Feedback zur Speichergewährung im Batchmodus. ab SQL Server 2017
DISABLE_DEFERRED_COMPILATION_TV Deaktiviert die verzögerte Kompilierung der Tabellenvariablen. ab SQL Server 2019
DISABLE_INTERLEAVED_EXECUTION_TVF Deaktiviert die verschachtelte Ausführung für Tabellenwertfunktionen mit mehreren Anweisungen. ab SQL Server 2017
DISABLE_OPTIMIZED_NESTED_LOOP TF 2340 Weist den Abfrageprozessor an, beim Generieren eines Abfrageplans keinen Sortiervorgang (Stapelsortierung) für optimierte Joins geschachtelter Schleifen zu verwenden.
DISABLE_OPTIMIZER_ROWGOAL TF 4138 Veranlasst SQL Server, einen Plan zu generieren, der keine Änderungen von Zeilenzielen für Abfragen verwendet, die die folgenden Schlüsselwörter enthalten:

  • TOP
  • OPTION (FAST N)
  • IN
  • EXISTS
DISABLE_PARAMETER_SNIFFING TF 4136 Weist den Abfrageoptimierer an, die durchschnittliche Datenverteilung zu verwenden, während eine Abfrage mit einem oder mehreren Parametern kompiliert wird. Diese Anweisung macht den Abfrageplan unabhängig von dem Parameterwert, der zuerst beim Kompilieren der Abfrage verwendet wurde. Verwenden Sie diesen Hinweis, um die Einstellung der datenbankbezogenen Konfiguration PARAMETER_SNIFFING=OFF außer Kraft zu setzen.
DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK Deaktiviert das Feedback zur Speichergewährung im Zeilenmodus. ab SQL Server 2019
DISABLE_TSQL_SCALAR_UDF_INLINING Deaktiviert skalares UDF-Inline. ab SQL Server 2019
DISALLOW_BATCH_MODE Deaktiviert die Ausführung im Batch-Modus. ab SQL Server 2019
ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS TF 4139 Ermöglicht automatisch generierte schnelle Statistiken (Histogrammänderung) für jede führende Indexspalte, für die eine Kardinalitätsschätzung erforderlich ist. Das Histogramm, das zum Schätzen der Kardinalität verwendet wird, wird zum Zeitpunkt der Abfragekompilierung angepasst, um den tatsächlichen maximalen oder minimalen Wert dieser Spalte zu berücksichtigen.
ENABLE_QUERY_OPTIMIZER_HOTFIXES TF 4199 Aktiviert Abfrageoptimierer-Hotfixes (Änderungen, die in kumulativen Updates und Service Packs für SQL Server veröffentlicht wurden). Verwenden Sie diesen Hinweis, um die Einstellung der datenbankbezogenen Konfiguration QUERY_OPTIMIZER_HOTFIXES=ON außer Kraft zu setzen.
FORCE_DEFAULT_CARDINALITY_ESTIMATION TF 9481 Erzwingt für den Abfrageoptimierer die Verwendung des Modells zur Kardinalitätsschätzung, das dem aktuellen Datenbank-Kompatibilitätsgrad entspricht. Verwenden Sie diesen Hinweis, um die Einstellung der datenbankbezogenen Konfiguration LEGACY_CARDINALITY_ESTIMATION=ON außer Kraft zu setzen.
FORCE_LEGACY_CARDINALITY_ESTIMATION TF 9481 Erzwingt die Verwendung des Modells zur Kardinalitätsschätzung von SQL Server 2012 (11.x) und früheren Versionen. Verwenden Sie diesen Hinweis, um die Einstellung der datenbankbezogenen Konfiguration LEGACY_CARDINALITY_ESTIMATION=ON außer Kraft zu setzen.
QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n Erzwingt das Verhalten des Abfrageoptimierers auf Abfrageebene. Dieses Verhalten tritt auf, als ob die Abfrage mit dem Datenbank-Kompatibilitätsgrad n kompiliert wurde, wobei n ein unterstützter Datenbank-Kompatibilitätsgrad ist. Eine Liste der derzeit unterstützten Werte für n finden Sie unter sys.dm_exec_valid_use_hints. beginnend mit SQL Server 2017 (14.x) CU10

Weitere Informationen finden Sie unter Hinweise (Transact-SQL) – Abfrage.

Weitere Informationen

Dieses Update ist in Service Pack 1 für SQL Server 2016 enthalten.

Informationen zu SQL Server 2016-Builds

Jeder neue Build für SQL Server 2016 enthält alle Hotfixes und Sicherheitsfixes, die im vorherigen Build enthalten waren. Wir empfehlen, den neuesten Build für SQL Server 2016 zu installieren.

Szenarien, in denen das Verhalten des SQL Server Query Optimizer (QO) angedeutet werden muss, sind recht häufig und werden traditionell durch die Verwendung mehrerer (dokumentierter und nicht dokumentierter) Ablaufverfolgungsflags behandelt. Wenn Ablaufverfolgungsflags jedoch global festgelegt werden, können sie sich negativ auf andere Workloads auswirken. Darüber hinaus ist ihre Aktivierung pro Sitzung bei vorhandenen Anwendungen nicht praktikabel, und die Aktivierung pro Abfrage mit OPTION QUERYTRACEON erfordert die Mitgliedschaft in der festen Serverrolle "sysadmin". (Sie können dieses Verhalten zwar mithilfe einer Plan-Anleitung oder einer gespeicherten Prozedur umgehen, Anmeldeinformationen mit erhöhten Rechten sind jedoch weiterhin erforderlich.)

Ablaufverfolgungsflags werden verwendet, um bestimmte Servereigenschaften vorübergehend festzulegen oder ein bestimmtes Verhalten auszuschalten. Sie sind möglicherweise schwierig zu verwalten und zu verstehen.

Informationen zu Ablaufverfolgungsflags finden Sie im Thema Ablaufverfolgungsflags (Transact-SQL) auf der MSDN-Website (MSDN).

Referenzmaterial

Informieren Sie sich über die Terminologie, die Microsoft zum Beschreiben von Softwareupdates verwendet.