Teilen über


Feedback zur Kardinalitätsschätzung (CE) für Ausdrücke

Gilt für: SQL Server 2025 (17.x) Azure SQL-Datenbank Azure SQL Managed InstanceSQL-Datenbank in Microsoft Fabric

Falsche Kardinalitätsschätzungen verursachen häufig eine schlechte Leistung während der Abfrageoptimierung. Das Feedback zur Kardinalitätsschätzung (CE) für Ausdrücke erweitert das Framework, das mit der CE-Feedbackfunktion eingeführt wurde. Ziel ist es, Kardinalitätsschätzungen für wiederholte Ausdrücke zu verbessern. Das Feedback für Ausdrücke lernt aus früheren Ausführungen von Ausdrücken über Abfragen hinweg, um geeignete CE-Modelloptionen zu finden und auf zukünftige Ausführungen dieser Ausdrücke anzuwenden. Wie CE-Feedback werden Modellempfehlungen getestet und automatisch auf zukünftige Abfrageausführungen angewendet.

Das Feedback für das Feature "Ausdrücke" identifiziert und verwendet eine Modellannahme , die besser zum Ausdruck und zur Datenverteilung einer bestimmten Abfrage passt, was wiederum die Qualität des Abfrageausführungsplans verbessert. Derzeit kann das Feedback für die Ausdrucksfunktion Planoperatoren identifizieren, bei denen die geschätzte Anzahl von Zeilen und die tatsächliche Anzahl von Zeilen sehr unterschiedlich sind. Feedback wird auf Ausdrücke innerhalb einer Abfrage angewendet, wenn erhebliche Modellschätzungsfehler auftreten, und es gibt ein geeignetes alternatives Modell, das Sie ausprobieren können.

Verschiedene Versionen des Datenbankmoduls verwenden unterschiedliche CE-Modellannahmen, basierend auf der Verteilung und Abfrage von Daten.

Verwenden Sie CE-Feedback für Ausdrücke

CE-Feedback für Ausdrücke überwacht die Ausführung von Abfragen und identifiziert Unterausdrücke, die konsistent zu einer Fehlschätzung der Kardinalität führen. Feedback wird basierend auf beobachteten Mustern generiert und während der Abfragekompilierung angewendet, um die Schätzgenauigkeit zu verbessern.

Voraussetzungen und Konfiguration

Um CE-Feedback für Ausdrücke zu verwenden, müssen die folgenden Voraussetzungen erfüllt sein:

  • Die Datenbank muss die Kompatibilitätsebene 160 oder höher verwenden.
  • Die datenbankspezifische CE_FEEDBACK_FOR_EXPRESSIONS Konfiguration muss aktiviert sein (standardmäßig aktiviert).
  • So überprüfen Sie den aktuellen Status der Datenbankbereichskonfiguration:
SELECT name,
       value,
       value_for_secondary
FROM sys.database_scoped_configurations
WHERE name = 'CE_FEEDBACK_FOR_EXPRESSIONS';

Das Feature kann für eine Datenbank mit dem folgenden Konfigurationsbefehl mit Datenbankbereich aktiviert werden:

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = ON;

Um die Feedback-Funktion für Ausdrücke einer Datenbank zu deaktivieren, deaktivieren Sie die CE_FEEDBACK_FOR_EXPRESSIONS datenbankspezifische Konfiguration.

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = OFF;

Funktionsweise

Während Fingerabdrücke kein neues Konzept mit dem SQL Server-Datenbankmodul sind, bezieht sich ein Fingerabdruck im Kontext des Feedbacks für Ausdrucksfeatures auf die Kombination der berechneten Signaturen innerhalb eines Ausdrucks. Beispielsweise kann ein Geschäftsanalyst in einem fiktiven Unternehmen Informationen zu den Bestellungen seiner Kunden erhalten, bei denen diese Kunden mehr als 10.000 $ ausgegeben haben. Eine SELECT-Anweisung, die zur Erfassung von Daten aus der Tabelle "Kunden" dient und die mit der Tabelle "Bestellungen" verbunden ist, kann eine Möglichkeit bieten, diesen Datentyp anzuzeigen.

SELECT *
FROM Customer AS C
     INNER JOIN Orders AS O
         ON C.custkey = O.o_custkey
WHERE O.o_totalprice > 10000;

Bei dieser Abfrage kann der Abfrageoptimierer auswählen, die Daten zunächst aus jeder Tabelle – Customer – und anschließend Orders zu holen, alle zugehörigen Spalten aus beiden Tabellen auszuwählen und die Daten (mit einem Filter) zu verknüpfen, bei denen der totalprice Bestellwert größer als 10.000 $ ist. Jeder logische Ausdruck, z. B. ein Filter oder eine Verknüpfung innerhalb eines Abfrageplans, generiert eine Signatur, die zu einem Fingerabdruck beiträgt. CE-Feedback für Ausdrücke verwendet diese Fingerabdrücke, um Feedback in Abfragen zu lernen und anzuwenden, die ähnliche Unterausdrücke gemeinsam nutzen, auch wenn die allgemeine Abfragestruktur unterschiedlich ist.

Die Funktion konzentriert sich auf Ausdrücke mit konsistenter Kardinalitätsüberschätzung bzw. -unterschätzung in Abfragen. Es analysiert zwei verschiedene Workloadmuster, die derzeit nicht für CE-Feedback geeignet sind:

  • Workloads ohne mehrfach ausgeführte Prozesse, aber mit wiederholten Ausdrucksmustern. Beispiel: ein häufig verwendetes Verknüpfungsmuster.

  • Abfragen, in denen ein Teil der Abfrage von einem anderen CE-Modell profitieren kann als ein anderer Teil derselben Abfrage. Beispielsweise könnte die Verknüpfung zwischen den Tabellen A und B einen einfachen Einschluss erfordern, während die Verknüpfung zwischen den Tabellen C und D einen Basiseinschluss erfordern könnte.

Das Feedback für das Feature "Ausdrücke" wendet Filter- und Verknüpfungsannahmen an, um Fehlschätzungsprobleme zu beheben, z. B.:

Filters:

  • ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES
  • ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES
  • ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES

Joins:

  • ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS
  • Basiseindämmungsannahme (kein Hinweis muss übergeben werden)

Diese Annahmen spiegeln unterschiedliche CE-Modellstrategien wider, z. B. Eindämmung und Unabhängigkeit. Weitere konzeptionelle Hintergründe finden Sie unter "Feedback zur Kardinalitätsschätzung" von Kate Smith und der Kardinalitätsschätzung für korrelierte Spalten in SQL Server 2016.

Tipp-Lebenszyklus

Feedbackhinweise durchlaufen die folgenden Zustände:

  • Überwachung: Das System beobachtet mehrfache Ausführungen eines Unterausdrucks und verfolgt, ob die Fehlschätzung der Kardinalität weiterhin besteht.
  • Anwenden: Wenn die Fehlschätzung fortgesetzt wird, könnte ein Feedbackhinweis generiert und während der Abfragekompilierung angewendet werden, um das CE-Modell anzupassen.
  • Blockiert: Wenn der angewendete Hinweis zu einer suboptimalen Kardinalitätsschätzung führt, wird er von zukünftiger Verwendung ausgeschlossen.

Dieser Lebenszyklus stellt sicher, dass Feedback nur angewendet wird, wenn es vorteilhaft ist und Regressionen bei der Schätzungsqualität vermieden werden.

Regressionsschutz

CE-Feedback für Ausdrücke umfasst einen Schutz gegen Regressionen. Wenn ein Hinweis eine schlechtere Kardinalitätsschätzung als zuvor verursacht, wird er blockiert. Dieser Schutz ist jedoch auf die Kardinalitätsschätzung beschränkt und wertet die Ausführungszeit der Abfrage nicht aus. Bei Regressionen im Zusammenhang mit Ausführung/Laufzeit kann die automatische Plankorrektur eingreifen. Wenn das Feature für die automatische Plankorrektur nicht aktiviert ist, werden Aktionen, die das Feature ausführen würde, aufgezeichnet und verfügbar, indem die sys.dm_db_tuning_recommendations dynamische Verwaltungsansicht abgefragt wird.

Telemetrie und Überwachung

CE-Feedback für Ausdrucksaktivitäten kann mithilfe der folgenden Tools überwacht werden:

  • Erweiterte Ereignisse:
    • adhoc_ce_feedback_query_level_telemetry
    • query_adhoc_ce_feedback_expression_hint
    • query_adhoc_ce_feedback_hint

Die erweiterten CE-Feedback-Ereignisse query_ce_feedback_begin_analysis und query_ce_feedback_telemetry können auch hilfreich sein bei der Nachverfolgung der Aktivitäten des Features.

  • Fingerabdruckdaten werden in einer dedizierten Speicherverwaltungseinheit mit dem Namen AdHocCEFeedbackCache zwischengespeichert. Auf diesen Cache kann über die Systemkatalogansicht sys.dm_exec_ce_feedback_cachezugegriffen werden.

  • Showplan-Integration

    Wenn ein CE-Feedback für Ausdrücke angewendet wird, enthält der Abfrageplan ein CardinalityFeedback Attribut in der XML von Showplan. Dieses Tag gibt an, dass feedback verwendet wurde, um die Kardinalitätsschätzung für einen bestimmten Unterausdruck anzupassen.

Cache und Persistenz

Beibehaltenes Feedback wird in einer internen Abfragespeichertabelle (sys.plan_persist_ce_feedback_for_expressions) gespeichert und beim Start neu geladen. Dadurch wird sichergestellt, dass das System kein Erneutes Feedback für fingerabdrücke benötigt, die es bereits festgestellt hat. Der Cachepersistenzmechanismus ist verlustbehaftet, d. h., das Feedback wird nur in regelmäßigen Abständen auf dem Datenträger gespeichert. Die Häufigkeit der Persistenz ist derzeit nicht konfigurierbar.

Wenn die SQL Server-Instanz neu gestartet wird oder der Speicher vor dem nächsten Persistenzzyklus gelöscht wird, kann das feedback, das seit dem letzten Leeren generiert wurde, verloren gehen.

Limitations

Persistenz ist derzeit für den Abfragespeicher für lesbare Secondaries nicht verfügbar. CE-Feedback für Ausdrücke kann Feedback auf ein primäres Replikat und auf ein sekundäres Replikat unterschiedlich anwenden. Das Feedback wird jedoch nicht für sekundäre Replikate beibehalten und ist nur innerhalb des speicherbasierten Caches in diesem Szenario vorhanden. Wenn ein Failover-Ereignis auftritt, geht das Feedback, das auf einem der lesbaren Sekundäre gelernt wurde, verloren.