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 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 ścieżki w celu zapewnienia odpowiednich i aktualnych statystyk:
- Statystyki zdefiniowane przez użytkownika
- Użytkownik ręcznie używa składni języka definicji danych (DDL) do tworzenia, aktualizowania i porzucania statystyk zgodnie z potrzebami
- Automatyczne statystyki
- Aparat automatycznie tworzy i utrzymuje statystyki w czasie wykonywania zapytań
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 kolumnach intensywnie używanych 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_FullScan
statystyk , 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_FullScan
statystyk:
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:
- widok katalogu sys.stats
- widok wykazu sys.stats_columns
- funkcja systemowa STATS_DATE
Automatyczne statystyki w zapytaniu
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 zapytania wyzwalającego. Ponadto jeśli aparat 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 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
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
automatycznie wygenerowaną statystykę histogramu (powinna być podobna _WA_Sys_00000007_3B75D760
do ) 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ń.