KB2952444-Fix: schlechte Leistung bei Verwendung von Tabellenvariablen in SQL Server 2012 oder SQL Server 2014

Problembeschreibung

Wenn Sie eine Tabellenvariable mit vielen Zeilen füllen und dann mit anderen Tabellen verknüpfen, kann der Abfrageoptimierer einen ineffizienten Abfrageplan auswählen, der zu einer verlangsamten Abfrageleistung führen kann.

Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsupdates, die im vorherigen kumulativen Update enthalten waren. Schauen Sie sich die neuesten kumulativen Updates für SQL Server an:

Service Pack 2 für SQL Server 2012

Service Packs sind kumulativ. Jedes neue Service Pack enthält neben neuen Updates alle Updates früherer Service Packs. Wir empfehlen, das neueste Service Pack und das neueste kumulative Update für dieses Service Pack zu verwenden. Sie müssen also keine älteren Versionen eines Service Packs installieren, bevor Sie das neueste Service Pack installieren. Verwenden Sie Tabelle 1 im folgenden Artikel, um weitere Informationen zum neuesten Service Pack und dem neuesten kumulativen Update zu finden:

Ermitteln der Versions-, Editions-und Update Ebene von SQL Server und dessen Komponenten

Weitere Informationen

Wenn Sie eine Tabellenvariable in einem Batch oder einer Prozedur verwenden, wird die Abfrage kompiliert und für den anfänglichen leeren Zustand der Tabellenvariablen optimiert. Wenn diese Tabellenvariable zur Laufzeit mit vielen Zeilen gefüllt ist, ist der vorkompilierte Abfrageplan möglicherweise nicht mehr optimal. Beispielsweise kann die Abfrage einer Tabellenvariablen mit einer geschachtelten Schleife beitreten, da Sie für eine geringe Anzahl von Zeilen in der Regel effizienter ist. Dieser Abfrageplan kann ineffizient sein, wenn die Tabellenvariable Millionen von Zeilen enthält. Eine Hash-Verknüpfung ist unter solchen Bedingungen möglicherweise eine bessere Wahl. Um einen neuen Abfrageplan abzurufen, muss er erneut kompiliert werden. Im Gegensatz zu anderen Benutzer-oder temporären Tabellen löst die Änderung der Zeilenanzahl in einer Tabellenvariablen keine erneute Kompilierung einer Abfrage aus. In der Regel können Sie dies mit der Option (neu kompilieren) umgehen, die eigene Overhead-Kosten hat. Das Ablaufverfolgungsflag 2453 ermöglicht den Vorteil einer Abfragekompilierung ohne Option (neu kompilieren). Dieses Ablaufverfolgungsflag unterscheidet sich von Option (neu kompilieren) in zwei Hauptaspekten. (1) Es wird derselbe Schwellenwert für die Zeilenanzahl wie bei anderen Tabellen verwendet. Die Abfrage muss nicht für jede Ausführung im Gegensatz zur Option (neu kompilieren) kompiliert werden. Eine Neukompilierung wird nur ausgelöst, wenn die Änderung der Zeilenanzahl den vordefinierten Schwellenwert überschreitet. (2) die Option (neu kompilieren) zwingt die Abfrage dazu, Parameter einzusehen und die Abfrage für Sie zu optimieren. Mit diesem Ablaufverfolgungsflag wird das einspähen des Parameters nicht erzwungen.Hinweis dieses Ablaufverfolgungsflag muss zur Laufzeit aktiviert sein. Sie können dieses Ablaufverfolgungsflag nicht mit QUERYTRACEON verwenden. Dieses Ablaufverfolgungsflag muss mit Bedacht verwendet werden, da es die Anzahl der erneuten Abfragekompilierungen erhöhen kann, die mehr als Einsparungen durch eine bessere Abfrageoptimierung Kosten könnten.

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.

Benötigen Sie weitere Hilfe?

Ihre Office-Fähigkeiten erweitern
Schulungen erkunden
Neue Funktionen als Erster erhalten
Microsoft Insider beitreten

War diese Information hilfreich?

Vielen Dank für Ihr Feedback!

Vielen Dank für Ihr Feedback. Es klingt, als ob es hilfreich sein könnte, Sie mit einem unserer Office-Supportmitarbeiter zu verbinden.

×