Statystyki magazynowania danych sieci szkieletowej

Dotyczy: Punkt końcowy SQL i magazyn w usłudze Microsoft Fabric

Magazyn w usłudze Microsoft Fabric używa aparatu zapytań do utworzenia planu wykonywania dla danego zapytania SQL. Po przesłaniu zapytania optymalizator zapytań próbuje wyliczyć wszystkie możliwe plany i wybrać najbardziej efektywnego kandydata. Aby określić, który plan wymagałby najmniejszego obciążenia (we/wy, procesora CPU, pamięci), aparat musi mieć możliwość oszacowania ilości pracy lub wierszy, które mogą być przetwarzane przez każdego operatora. Następnie, na podstawie kosztów każdego planu, wybiera ten z najmniejszą ilością szacowanej pracy. Statystyki to obiekty zawierające istotne informacje o danych, aby umożliwić optymalizatorowi zapytań oszacowanie tych kosztów.

Ważne

Usługa Microsoft Fabric jest dostępna w wersji zapoznawczej.

Jak korzystać ze statystyk

Aby uzyskać optymalną wydajność zapytań, ważne jest, aby mieć dokładne statystyki. Usługa Microsoft Fabric obsługuje obecnie następujące ścieżki, aby zapewnić odpowiednie i aktualne statystyki:

Statystyki ręczne dla wszystkich tabel

Tradycyjna opcja utrzymania kondycji statystyk jest dostępna w usłudze Microsoft Fabric. Użytkownicy mogą tworzyć, aktualizować i porzucać statystyki jednokolumtowe oparte na histogramie, odpowiednio za pomocą funkcji CREATE STATISTICS, UPDATE STATISTICS i DROP STATISTICS. Użytkownicy mogą również wyświetlać zawartość statystyk jednokolumtowych opartych na histogramie z SHOW_STATISTICS DBCC. Obecnie obsługiwana jest ograniczona wersja tych instrukcji.

  • Jeśli tworzysz statystyki ręcznie, rozważ skupienie się na tych, które są intensywnie używane w obciążeniu zapytań (w szczególności w grupach BYs, ORDER BYs, filtry i JOINs).
  • Rozważ regularne aktualizowanie statystyk na poziomie kolumny po zmianach danych, które znacząco zmieniają liczbę wierszy lub rozkład danych.

Przykłady ręcznej konserwacji statystyk

Aby utworzyć statystyki dotyczące dbo.DimCustomer tabeli, na podstawie wszystkich wierszy w kolumnie CustomerKey:

CREATE STATISTICS DimCustomer_CustomerKey_FullScan
ON dbo.DimCustomer (CustomerKey) WITH FULLSCAN;

Aby ręcznie zaktualizować obiekt DimCustomer_CustomerKey_FullScanstatystyk , być może po aktualizacji dużych danych:

UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;  

Aby wyświetlić informacje o obiekcie statystyk:

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan");

Aby wyświetlić tylko informacje o histogramie obiektu statystyk:

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan") WITH HISTOGRAM;

Aby ręcznie usunąć obiekt DimCustomer_CustomerKey_FullScanstatystyk:

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

Następujące obiekty języka T-SQL mogą być również używane do sprawdzania ręcznie utworzonych i automatycznie utworzonych statystyk w usłudze Microsoft Fabric:

Automatyczne statystyki w zapytaniu

Za każdym razem, gdy wydasz zapytanie i optymalizator zapytań wymaga statystyk dotyczących eksploracji planu, usługa Microsoft Fabric automatycznie utworzy te statystyki, jeśli jeszcze nie istnieją. Po utworzeniu statystyk optymalizator zapytań może ich używać do szacowania kosztów planu zapytania wyzwalającego. Ponadto jeśli aparat zapytań ustali, że istniejące statystyki dotyczące zapytania nie odzwierciedlają już dokładnie danych, te statystyki zostaną automatycznie odświeżone. Ponieważ te operacje automatyczne są wykonywane synchronicznie, można oczekiwać, że czas trwania zapytania zostanie uwzględniony tym razem, jeśli potrzebne statystyki jeszcze nie istnieją lub od czasu ostatniego odświeżenia statystyk wystąpiły istotne zmiany danych.

Aby zweryfikować automatyczne statystyki w czasie wykonywania zapytania

Istnieją różne przypadki, w których można oczekiwać pewnego rodzaju automatycznych statystyk. Najczęściej spotykane są statystyki oparte na histogramie, które są żądane przez optymalizator zapytań dla kolumn przywoływanych w grupach BYs, JOINs, klauzule DISTINCT, filtry (klauzule WHERE) i ORDER BYs. Jeśli na przykład chcesz zobaczyć automatyczne tworzenie tych statystyk, zapytanie wyzwoli tworzenie, jeśli statystyki COLUMN_NAME jeszcze nie istnieją. Na przykład:

SELECT <COLUMN_NAME>
FROM <YOUR_TABLE_NAME>
GROUP BY <COLUMN_NAME>;

W takim przypadku należy oczekiwać, że statystyki COLUMN_NAME zostały utworzone. Jeśli kolumna była również kolumną varchar, zobaczysz również utworzone statystyki średniej długości kolumny. Jeśli chcesz automatycznie zweryfikować statystyki, możesz uruchomić następujące zapytanie:

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 
INNER JOIN sys.stats_columns AS sc 
ON s.object_id = sc.object_id 
AND s.stats_id = sc.stats_id 
INNER 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;

To zapytanie szuka tylko statystyk opartych na kolumnach. Jeśli chcesz zobaczyć wszystkie statystyki, które istnieją dla tej tabeli, usuń numery JOIN w systemach sys.stats_columns i sys.columns.

Teraz możesz znaleźć statistics_name automatycznie wygenerowaną statystykę histogramu (powinna być podobna _WA_Sys_00000007_3B75D760do ) i uruchomić następujący kod T-SQL:

DBCC SHOW_STATISTICS ('<YOUR_TABLE_NAME>', '<statistics_name>');

Na przykład:

DBCC SHOW_STATISTICS ('sales.FactInvoice', '_WA_Sys_00000007_3B75D760');

Wartość Updated w zestawie wyników SHOW_STATISTICS DBCC powinna być datą (w formacie UTC) podobną do po uruchomieniu oryginalnego zapytania GROUP BY.

Te automatycznie generowane statystyki mogą być następnie używane w kolejnych zapytaniach przez aparat zapytań w celu zwiększenia kosztów i wydajności wykonywania planu. Jeśli w tabeli wystąpi wystarczająca liczba zmian, aparat zapytań również odświeży te statystyki, aby poprawić optymalizację zapytań. To samo ćwiczenie powyżej można zastosować po znacznej zmianie tabeli. W wersji zapoznawczej usługi Fabric aparat zapytań SQL używa tego samego progu ponownej kompilacji co SQL Server 2016 (13.x) w celu odświeżenia statystyk.

Typy automatycznie generowanych statystyk

W usłudze Microsoft Fabric istnieje wiele typów statystyk, które są generowane automatycznie przez aparat w celu ulepszenia planów zapytań. Obecnie można je znaleźć w pliku sys.stats , chociaż nie wszystkie są możliwe do działania:

  • Statystyki histogramu
    • Utworzono dla kolumny, która wymaga statystyk histogramu w czasie wykonywania zapytania
    • Te obiekty zawierają histogram i informacje o gęstości dotyczące rozkładu określonej kolumny. Podobnie jak w przypadku statystyk automatycznie tworzonych w czasie wykonywania zapytań w dedykowanych pulach usługi Azure Synapse Analytics.
    • Nazwa zaczyna się od _WA_Sys_.
    • Zawartość można wyświetlić za pomocą SHOW_STATISTICS DBCC
  • Statystyki średniej długości kolumny
    • Utworzono dla kolumn znaków (char i varchar) wymagających średniej długości kolumny w czasie wykonywania zapytania.
    • Te obiekty zawierają wartość reprezentującą średni rozmiar wiersza kolumny varchar w momencie tworzenia statystyk.
    • Nazwa zaczyna się od ACE-AverageColumnLength_.
    • Nie można wyświetlić zawartości i nie można jej odwoływać.
  • Statystyki kardynalności oparte na tabelach
    • Utworzono dla tabeli wymagające szacowania kardynalności w czasie wykonywania zapytania.
    • Te obiekty zawierają oszacowanie liczby wierszy tabeli.
    • Nazwane ACE-Cardinality.
    • Nie można wyświetlić zawartości i nie można jej odwoływać.

Ograniczenia

  • Tylko statystyki histogramu z jedną kolumną można tworzyć i modyfikować ręcznie.
  • Tworzenie statystyk wielokolumnach nie jest obsługiwane.
  • Inne obiekty statystyk mogą być wyświetlane w obszarze sys.stats oprócz ręcznie utworzonych statystyk i automatycznie utworzonych statystyk. Te obiekty nie są używane do optymalizacji zapytań.

Następne kroki