Udostępnij za pośrednictwem


Statystyki magazynowania danych w sieci szkieletowej

Dotyczy:✅ punkt końcowy analizy SQL i magazyn 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 wyliczyć wszystkie możliwe plany i wybrać najbardziej wydajnego 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, które zawierają odpowiednie informacje o danych, aby umożliwić optymalizatorowi zapytań oszacowanie tych kosztów.

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 w celu zapewnienia 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 jednokolumny opartych na histogramie przy użyciu 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 zapytania (w szczególności w grupach BY, 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 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 DimCustomer_CustomerKey_FullScanstatystyk:

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 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żesz 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.

Weryfikowanie automatycznych statystyk w czasie wykonywania zapytań

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 przywoływanych w grupach BYs, JOIN, 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ć utworzenia statystyk COLUMN_NAME . Jeśli kolumna była również kolumną varchar, zobaczysz również utworzone statystyki średniej długości kolumn. 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 wyszukuje tylko statystyki oparte na kolumnach. Jeśli chcesz wyświetlić 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');

Updated Wartość w zestawie wyników SHOW_STATISTICS DBCC powinna być datą (w formacie UTC) podobną do oryginalnej kwerendy 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ń odświeży również te statystyki, aby poprawić optymalizację zapytań. To samo poprzednie przykładowe ćwiczenie można zastosować po znacznej zmianie tabeli. W sieci szkieletowej aparat zapytań SQL używa tego samego progu ponownej kompilacji co program 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 kolumny, które wymagają 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 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
  • Średnie statystyki długości kolumn
    • Utworzono kolumny znaków zmiennych (varchar) większe 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 i nie można jej odwoływać przez użytkownika.
  • Statystyki kardynalności oparte na tabelach
    • Utworzono tabelę, która wymaga oszacowania kardynalności w czasie wykonywania zapytań.
    • Te obiekty zawierają oszacowanie liczby wierszy tabeli.
    • Nazwane ACE-Cardinality.
    • Nie można wyświetlić zawartości i nie można jej odwoływać przez użytkownika.

Ograniczenia

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