Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:✅ SQL-Analyseendpunkt und Warehouse in Microsoft Fabric
Das Warehouse in Microsoft Fabric verwendet eine Abfrage-Engine, um einen Ausführungsplan für eine bestimmte SQL-Abfrage zu erstellen. Wenn Sie eine Abfrage übermitteln, versucht der Abfrageoptimierer, alle möglichen Pläne aufzulisten und die effizienteste Option auszuwählen. Um zu bestimmen, welcher Plan den geringsten Mehraufwand (E/A, CPU, Arbeitsspeicher) erfordert, muss die Engine in der Lage sein, den Arbeitsaufwand oder die Zeilen auszuwerten, die bei jedem Operator verarbeitet werden können. Anschließend wählt er basierend auf den Kosten jedes Plans den Plan mit dem geringsten geschätzten Arbeitsaufwand aus. Statistiken sind Objekte, die relevante Informationen zu Ihren Daten enthalten, damit der Abfrageoptimierer diese Kosten schätzen kann.
So verwenden Sie Statistiken
Um eine optimale Abfrageleistung zu erzielen, ist es wichtig, über genaue Statistiken zu verfügen. Microsoft Fabric unterstützt derzeit die folgenden Pfade, um relevante und aktuelle Statistiken bereitzustellen:
- Benutzerdefinierte Statistiken
- Der Benutzer verwendet manuell die DDL-Syntax (Data Definition Language) zum Erstellen, Aktualisieren und Löschen von Statistiken nach Bedarf
- Automatische Statistiken
Manuelle Statistiken für alle Tabellen
Die herkömmliche Option zum Aufrechterhalten des Zustands der Statistiken ist in Microsoft Fabric verfügbar. Benutzer*innen können histogrammbasierte Einzelspaltenstatistiken erstellen (CREATE STATISTICS), aktualisieren (UPDATE STATISTICS) und löschen (DROP STATISTICS). Zudem können sie den Inhalt histogrammbasierter Einzelspaltenstatistiken mithilfe von DBCC SHOW_STATISTICS anzeigen. Derzeit wird eine eingeschränkte Version dieser Statements unterstützt.
- Wenn Sie Statistiken manuell erstellen, sollten Sie sich auf Spalten konzentrieren, die in Ihrer Abfrageworkload häufig verwendet werden (insbesondere in GROUP BY-, ORDER BY-, Filter- und JOIN-Klauseln).
- Erwägen Sie, Statistiken auf Spaltenebene regelmäßig nach Datenänderungen zu aktualisieren, die die Zeilenanzahl oder Verteilung der Daten erheblich ändern.
Beispiele für die manuelle Statistikverwaltung
Erstellen Sie Statistiken für die dbo.DimCustomer-Tabelle basierend auf allen Zeilen in der Spalte CustomerKey:
CREATE STATISTICS DimCustomer_CustomerKey_FullScan
ON dbo.DimCustomer (CustomerKey) WITH FULLSCAN;
Manuelles Aktualisieren des Statistikobjekts DimCustomer_CustomerKey_FullScan (ggf. nach einer umfangreichen Datenaktualisierung):
UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;
Informationen zum Statistikobjekt anzeigen:
DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan");
Nur Informationen zum Histogramm des Statistikobjekts anzeigen:
DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan") WITH HISTOGRAM;
Statistikobjekt DimCustomer_CustomerKey_FullScan manuell löschen:
DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;
Die folgenden T-SQL-Objekte können auch verwendet werden, um manuell und automatisch erstellte Statistiken in Microsoft Fabric zu überprüfen:
- sys.stats-Katalogansicht
- sys.stats_columns-Katalogansicht
- STATS_DATE-Systemfunktion
Automatische Statistiken für Abfragen
Wenn Sie eine Abfrage ausgeben und der Abfrageoptimierer Statistiken für die Planauswertung benötigt, erstellt Microsoft Fabric diese Statistiken automatisch, wenn sie noch nicht vorhanden sind. Nachdem Statistiken erstellt wurden, kann der Abfrageoptimierer sie verwenden, um die Plankosten der auslösenden Abfrage zu schätzen. Wenn die Abfrage-Engine feststellt, dass vorhandene, für die Abfrage relevante Statistiken die Daten nicht mehr genau widerspiegeln, werden diese Statistiken automatisch aktualisiert. Da diese automatischen Vorgänge synchron ausgeführt werden, können Sie davon ausgehen, dass die Abfragedauer diese Zeit einschließt, wenn die benötigten Statistiken noch nicht vorhanden sind oder seit der letzten Statistikaktualisierung erhebliche Änderungen an den Daten vorgenommen wurden.
Überprüfen der automatischen Statistiken zur Query-Zeit
Es gibt verschiedene Fälle, in denen Sie eine Art von automatischen Statistiken erwarten können. Am häufigsten sind histogrammbasierte Statistiken, die vom Abfrageoptimierer für Spalten angefordert werden, auf die in GROUP BY-, JOIN-, DISTINCT- und ORDER BY-Klauseln sowie Filtern (WHERE-Klauseln) verwiesen wird. Wenn noch keine Statistiken für COLUMN_NAME vorhanden sind und Sie beispielsweise die automatische Erstellung dieser Statistiken anzeigen möchten, löst eine Abfrage die Erstellung aus. Zum Beispiel:
SELECT <COLUMN_NAME>
FROM <YOUR_TABLE_NAME>
GROUP BY <COLUMN_NAME>;
In diesem Fall sollten Sie davon ausgehen, dass Statistiken für COLUMN_NAME erstellt wurden. Wenn die Spalte auch eine varchar-Spalte war, würden auch Statistiken zur durchschnittlichen Spaltenlänge erstellt werden. Wenn Sie überprüfen möchten, ob Statistiken automatisch erstellt wurden, können Sie die folgende Abfrage ausführen:
select
object_name(s.object_id) AS [object_name],
c.name AS [column_name],
s.name AS [stats_name],
s.stats_id,
STATS_DATE(s.object_id, s.stats_id) AS [stats_update_date],
s.auto_created,
s.user_created,
s.stats_generation_method_desc
FROM sys.stats AS s
INNER JOIN sys.objects AS o
ON o.object_id = s.object_id
LEFT JOIN sys.stats_columns AS sc
ON s.object_id = sc.object_id
AND s.stats_id = sc.stats_id
LEFT JOIN sys.columns AS c
ON sc.object_id = c.object_id
AND c.column_id = sc.column_id
WHERE o.type = 'U' -- Only check for stats on user-tables
AND s.auto_created = 1
AND o.name = '<YOUR_TABLE_NAME>'
ORDER BY object_name, column_name;
Nun können Sie den statistics_name der automatisch generierten Histogrammstatistik (sollte etwa _WA_Sys_00000007_3B75D760 lauten) ermitteln und den folgenden T-SQL-Code ausführen:
DBCC SHOW_STATISTICS ('<YOUR_TABLE_NAME>', '<statistics_name>');
Beispiel:
DBCC SHOW_STATISTICS ('sales.FactInvoice', '_WA_Sys_00000007_3B75D760');
Der Updated-Wert im Resultset von DBCC SHOW_STATISTICS sollte ein Datum (in UTC) sein (ähnlich wie beim Ausführen der ursprünglichen GROUP BY-Abfrage).
Diese automatisch generierten Statistiken können dann von der Abfrage-Engine in nachfolgenden Abfragen genutzt werden, um die Kostenkalkulation des Ausführungsplans zu verbessern und die Ausführungseffizienz zu verbessern. Wenn genügend Änderungen in der Tabelle vorliegen, aktualisiert die Abfrage-Engine auch diese Statistiken, um die Abfrageoptimierung zu verbessern. Das gleiche vorherige Beispiel kann auch nach einer erheblichen Änderung der Tabelle angewendet werden. In Fabric verwendet die SQL-Abfrage-Engine denselben Schwellenwert für die Neukompilierung wie in SQL Server 2016 (13.x), um Statistiken zu aktualisieren.
Arten automatisch generierter Statistiken
In Microsoft Fabric gibt es mehrere Arten von Statistiken, die automatisch von der Engine generiert werden, um Abfragepläne zu verbessern. Derzeit sind sie in sys.stats zu finden, obwohl nicht alle handlungsrelevant sind:
- Histogrammstatistiken
- Diese Statistiken werden für jede Spalte erstellt, die zur Abfragezeit Histogrammstatistiken erfordert.
- Diese Objekte enthalten Histogramm- und Dichteinformationen zur Verteilung einer bestimmten Spalte. Sie ähneln den Statistiken, die in dedizierten Azure Synapse Analytics-Pools automatisch zur Abfragezeit erstellt werden.
- Der Name beginnt mit
_WA_Sys_. - Inhalte können mit DBCC SHOW_STATISTICS angezeigt werden.
- Statistiken zur durchschnittlichen Spaltenlänge
- Erstellt für Spalten mit variabler Zeichenlänge (varchar) von mehr als 100, wenn zur Abfragezeit die durchschnittliche Spaltenlänge benötigt wird.
- Diese Objekte enthalten einen Wert, der die durchschnittliche Zeilengröße der varchar-Spalte zum Zeitpunkt der Erstellung von Statistiken darstellt.
- Der Name beginnt mit
ACE-AverageColumnLength_. - Inhalte können nicht angezeigt werden und sind für Benutzer*innen nicht bedienbar.
- Tabellenbasierte Kardinalitätsstatistiken
- Erstellt per Tabelle, die zur Abfragezeit eine Kardinalitätsschätzung benötigt, nur wenn andere Zeilenzähl-Metadaten nicht verfügbar sind.
- Diese Objekte enthalten eine Schätzung der Zeilenanzahl einer Tabelle.
- Namens
ACE-Cardinality - Inhalte können nicht angezeigt werden und sind für Benutzer*innen nicht bedienbar.
- Erstellt per Tabelle, die zur Abfragezeit eine Kardinalitätsschätzung benötigt, nur wenn andere Zeilenzähl-Metadaten nicht verfügbar sind.
Integrierte Optimierungen in Fabric-Statistiken
Aktualisierung inkrementeller Statistiken
Die inkrementelle Aktualisierung von Statistiken stellt eine Leistungsverbesserung für automatische Aktualisierungen von Spaltenstatistiken dar.
Wenn die Statistik einer Spalte automatisch aktualisiert wird, muss in der Regel eine Stichprobe der gesamten Spalte gescannt werden, um die Statistik zu aktualisieren. Dieses Feature beschleunigt diese Vorgänge, wenn möglich, nur durch Samplingzeilen, die seit der letzten Aktualisierung hinzugefügt wurden, und das Zusammenführen dieser Daten mit vorhandenen Histogrammen.
Wenn das Modul eine Aktualisierung an eine Spaltenstatistik anfordert, wird automatisch ermittelt, ob diese schnellere Aktualisierungsmethode verwendet werden kann. Inkrementelle Statistikaktualisierungen sind in der Regel vorteilhaft für größere Tabellen, die hauptsächlich INSERTs enthalten, seit der letzten Aktualisierung der Statistik.
Proaktive Aktualisierung von Statistiken
Die proaktive Aktualisierung von Statistiken ist ein vollständig verwalteter Prozess, der nach der Datenänderung versucht, Statistikaktualisierungen vorzuladen.
Diese Optimierung zielt darauf ab, die Wahrscheinlichkeit einer SELECT Abfrageverzögerung zu verringern, die durch Statistikaktualisierungen während der Abfrageplangenerierung verursacht wird.
Proaktive Statistikaktualisierungen wirken sich nur auf automatisch generierte Histogrammstatistiken aus, diejenigen mit der vom System generierten Benennungskonvention von _WA_Sys_.
Die proaktive Aktualisierungsfunktion für Statistiken ist standardmäßig aktiviert, kann jedoch mit dem BEFEHL ALTER DATABASE T-SQL konfiguriert werden.
Einschränkungen
- Nur einspaltige Histogrammstatistiken können manuell erstellt und geändert werden.
- Die Erstellung von mehrspaltigen Statistiken wird nicht unterstützt.
- Andere Statistikobjekte können in sys.stats neben manuell und automatisch erstellten Statistiken vorkommen. Diese Objekte werden nicht für die Abfrageoptimierung verwendet.