Die Funktion "Force-Plan für Abfragespeicher" funktioniert nicht


12

Die Planfunktion "Query Store Force" scheint den Plan nicht zu erzwingen.

Mir ist bekannt, dass Query Store - Forced nicht immer Forced bedeutet . Mein Plan ändert sich jedoch möglicherweise nicht unwesentlich, aber das Abfrageoptimierungsprogramm wählt möglicherweise weiterhin falsche Indizes, Schleifenoptionen usw. aus.

Grundsätzlich gilt: Meine erzwungene Planentscheidung wird nicht berücksichtigt. Ich habe viele Pläne erzwungen und es funktioniert einfach nicht .

  1. Es gibt 0 Fehlerzahlen oder Gründe, wenn ich mir das ansehe sys.query_store_plan force_failure_count.
  2. Erweitertes Ereignis query_store_plan_forcing_failedbringt nichts. 0 Ereignisse.

Zum Beispiel ein Plan, der am 20.09 erzwungen wurde. Nur 1 Zusammenstellung verwendete erzwungenen Plan.

Pläne für die Abfrage

Die Pläne unterscheiden sich stark, einer verwendet Hash Match Join mit INDEX 1, der andere Loop Join mit INDEX 2.

Verschiedene Pläne

Version: Microsoft SQL Server 2016 (SP1-DDR) (KB3210089) - 13.0.4202.2 (X64)

Was fehlt mir hier?

Antworten:


16

Aus sys.query_store_plan (Transact-SQL) (Hervorhebung hinzugefügt)

Planen Sie Einschränkungen

Der Abfragespeicher verfügt über einen Mechanismus, mit dem das Abfrageoptimierungsprogramm zur Verwendung eines bestimmten Ausführungsplans erzwungen wird. Es gibt jedoch einige Einschränkungen, die verhindern können, dass ein Plan durchgesetzt wird .

Erstens, wenn der Plan folgende Konstruktionen enthält:

  • Bulk-Anweisung einfügen.
  • Verweis auf eine externe Tabelle
  • Verteilte Abfrage- oder Volltextoperationen
  • Verwendung globaler Abfragen
  • Cursor
  • Ungültige Sternverknüpfungsspezifikation

Sie verwenden einen Cursor.


Sie können stattdessen häufig einen Cursorplan mit einer Planführung erzwingen. Siehe Verwenden des USE PLAN-Abfragetipps für Abfragen mit Cursorn .

Und ja, ich stimme zu, dass die aktuelle Situation nicht die beste Benutzererfahrung bietet. Ich würde erwarten, dass der Versuch, einen Plan für etwas zu erzwingen, das (derzeit) nicht erzwungen werden kann, einen Fehler oder eine Warnung auslöst oder etwas protokolliert. Sie können ein Feedback-Element protokollieren , um eine Verbesserung in diesem Bereich anzufordern.


Ab SQL 2019 CTP 2.3 wird das Erzwingen des Abfrageausführungsplans für den schnellen Vorlauf und statische Cursor unterstützt

Der Abfragespeicher unterstützt jetzt die Möglichkeit, Abfrageausführungspläne für schnelle und statische T-SQL- und API-Cursor zu erzwingen. Das Erzwingen wird jetzt über sp_query_store_force_planoder über SQL Server Management Studio-Abfragespeicherberichte unterstützt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.