Statystyka

Dotyczy:✅ punkt końcowy analityki SQL i Hurtownia w usłudze Microsoft Fabric

Magazyn w usłudze Microsoft Fabric używa aparatu zapytań do utworzenia planu wykonania dla danego zapytania SQL. Podczas przesyłania zapytania optymalizator zapytań próbuje wygenerować wszystkie możliwe plany wykonania i wybrać najwydajniejszy plan. Aby określić, który plan wymagałby najmniejszego obciążenia (we/wy, procesora CPU, pamięci), silnik musi mieć możliwość ocenić ilość pracy lub liczbę 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, które zawierają odpowiednie informacje o danych, aby umożliwić optymalizatorowi zapytań oszacowanie tych kosztów.

Jak używać statystyk

Aby uzyskać optymalną wydajność zapytań, ważne jest, aby mieć dokładne statystyki. Usługa Microsoft Fabric obsługuje obecnie następujące sposoby zapewniania odpowiednich i aktualnych statystyk:

Ręczne statystyki dla wszystkich tabel

Tradycyjna opcja utrzymania kondycji statystyk jest dostępna w usłudze Microsoft Fabric. Użytkownicy mogą tworzyć, aktualizować i usuwać 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 jednokolumnowych opartych na histogramie przy użyciu DBCC SHOW_STATISTICS. Obecnie obsługiwana jest ograniczona wersja tych statementów.

  • Jeśli tworzysz statystyki ręcznie, rozważ skupienie się na kolumnach intensywnie używanych w obciążeniu związanym z zapytaniami (w szczególności w klauzulach GROUP BY, klauzulach ORDER BY, filtrach i klauzulach JOIN).
  • 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 aktualizacji 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 statystyk DimCustomer_CustomerKey_FullScan, być może po dużej aktualizacji 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 statystyk DimCustomer_CustomerKey_FullScan:

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

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

Automatyczne statystyki dla zapytania

Za każdym razem, gdy wystawiasz zapytanie i optymalizator zapytań wymaga statystyk dotyczących eksploracji planu, usługa Microsoft Fabric automatycznie tworzy te statystyki, jeśli jeszcze nie istnieją. Po utworzeniu statystyk optymalizator zapytań może ich używać do szacowania kosztów planu danego zapytania. Ponadto jeśli mechanizm zapytań ustali, że istniejące statystyki istotne dla zapytania nie odzwierciedlają już dokładnie danych, te statystyki są automatycznie odświeżane. Ponieważ te operacje automatyczne są wykonywane synchronicznie, możesz oczekiwać, że czas trwania zapytania będzie obejmował ten czas, jeśli potrzebne statystyki jeszcze nie istnieją lub od czasu ostatniego odświeżenia statystyk wystąpiły istotne zmiany danych.

Weryfikuj automatyczne statystyki w czasie wykonywania zapytania

Istnieją różne przypadki, w których można oczekiwać pewnego rodzaju automatycznych statystyk. Najbardziej typowe są statystyki oparte na histogramie, które są żądane przez optymalizator zapytań dla kolumn wymienianych w klauzulach GROUP BY, JOIN, DISTINCT, filtrach (klauzulach WHERE) i ORDER BY. Jeśli na przykład chcesz zobaczyć automatyczne tworzenie tych statystyk, zapytanie wyzwoli tworzenie, jeśli statystyki dla 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ć utworzenia statystyk dla COLUMN_NAME. Jeśli kolumna była również kolumną varchar, zobaczyłbyś również utworzone statystyki średniej długości kolumny. Jeśli chcesz zweryfikować, czy statystyki zostały utworzone automatycznie, 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 
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;

Teraz możesz znaleźć statistics_name nazwę automatycznie wygenerowanej statystyki histogramu (powinna wyglądać podobnie do _WA_Sys_00000007_3B75D760) 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 polecenia DBCC SHOW_STATISTICS powinna być datą (w formacie UTC) zbliżoną do czasu uruchomienia oryginalnej kwerendy GROUP BY.

Te automatycznie generowane statystyki mogą być następnie używane w kolejnych zapytaniach przez aparat zapytań w celu poprawy szacowania kosztów i wydajności wykonywania planu. Jeśli w tabeli wystąpi wystarczająca liczba zmian, aparat zapytań odświeży również te statystyki, aby poprawić optymalizację zapytań. To samo wcześniejsze ćwiczenie przykładowe można zastosować po znaczącym zmodyfikowaniu tabeli. W Fabric mechanizm zapytań SQL używa tego samego progu ponownej kompilacji co SQL Server 2016 (13.x) do odświeżania 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 wykonania:

  • Statystyki histogramu
    • Utworzono dla każdej 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 statystyki tworzone automatycznie w czasie zapytania w dedykowanych pulach usługi Azure Synapse Analytics.
    • Nazwa zaczyna się od _WA_Sys_.
    • Zawartość można wyświetlić za pomocą DBCC SHOW_STATISTICS
  • Statystyki średniej długości kolumn
    • Dla kolumn znakowych o zmiennej długości (varchar) większych niż 100, które wymagają ś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, a użytkownik nie może na niej wykonywać żadnych działań.
  • Statystyki kardynalności oparte na tabelach
    • Są tworzone dla każdej tabeli wymagającej estymacji kardynalności w momencie wykonywania zapytania, tylko jeśli inne metadane liczby wierszy nie są dostępne.
      • Te obiekty zawierają oszacowanie liczby wierszy tabeli.
      • Nazwa ACE-Cardinality.
      • Nie można wyświetlić zawartości, a użytkownik nie może wykonywać na niej działań.

Wbudowane optymalizacje w ramach statystyk Fabric

Odświeżanie statystyk przyrostowych

Odświeżanie statystyk przyrostowych to zwiększenie wydajności w przypadku automatycznych aktualizacji statystyk kolumn.

Zazwyczaj gdy statystyka kolumny jest automatycznie odświeżona, należy przeskanować próbkę całej kolumny, aby zaktualizować statystykę. Ta funkcja przyspiesza te operacje, gdy jest to możliwe, próbkując tylko wiersze dodane od ostatniego odświeżenia i scalając te dane z istniejącymi histogramami.

Gdy aparat żąda aktualizacji statystyki kolumny, automatycznie określi, czy można użyć tej szybszej metody odświeżania. Aktualizacje statystyk przyrostowych zwykle przynoszą korzyści większym tabelom, w których od ostatniego odświeżenia statystyk przeważają operacje INSERT.

Proaktywne odświeżanie statystyk

Proaktywne odświeżanie statystyk to w pełni zautomatyzowany proces, który ma na celu przygotowanie statystyk do odświeżenia przed zmianami danych.

Ta optymalizacja ma na celu zmniejszenie prawdopodobieństwa wystąpienia SELECT opóźnienia zapytania spowodowanego aktualizacjami statystyk podczas generowania planu zapytania.

Proaktywne aktualizacje statystyk wpływają tylko na automatycznie generowane statystyki histogramu, te zgodne z nazewnictwem generowanym przez system _WA_Sys_.

Funkcja proaktywnego odświeżania statystyk jest domyślnie włączona, ale można jej skonfigurować za pomocą polecenia T-SQL ALTER DATABASE .

Ograniczenia

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