Aktualizacja statystyk równoległych

14

Czy w SQL Server 2008 lub nowszym jest UPDATE STATISTICS WITH FULLSCANoperacja jednowątkowa, czy może korzystać z równoległości? Co powiesz na aktualizację statystyk z domyślnym próbkowaniem - czy może korzystać z równoległości? Nie widzę opcji określającej MAXDOPstatystyki aktualizacji.

Uczący się języka SQL
źródło

Odpowiedzi:

22

Równoległa aktualizacja statystyk jest dostępna od SQL Server 2005. Jest to udokumentowane w artykule TechNet, „Statystyka używana przez Optymalizator zapytań w Microsoft SQL Server 2005” :

Wyciąg z artykułu

Gdy wykonywane jest pełne skanowanie (jawnie wymagane lub nie), zapytanie wewnętrzne generowane dla gromadzenia danych ma ogólną postać:

SELECT
    StatMan([SC0])
FROM 
(
    SELECT TOP 100 PERCENT
        [Column] AS [SC0]
    FROM [Table] WITH (READUNCOMMITTED)
    ORDER BY [SC0]
) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 16)

Zwróć uwagę na MAXDOPpodpowiedź tam (chociaż użytkownik nie ma możliwości ręcznego określenia podpowiedzi). W przypadku gromadzenia próbkowanych statystyk zapytanie wewnętrzne korzysta z TABLESAMPLEklauzuli, która zapobiega równoległości. Silnik generuje również MAXDOP 1podpowiedź do wewnętrznego zapytania, które jest nieco zbędne.

Jeśli kiedykolwiek trzeba zmniejszyć równoległość, MAXDOPwskazówkę w wewnętrznym zapytaniu można zastąpić za pomocą narzędzia Resource Governor (tylko wersja Enterprise).

SQL Server 2016 dodaje aktualizację statystyk próbkowanych równolegle .

Paul White 9
źródło
1

Począwszy od SQL Server 2016 SP2 można użyć MAXDOPopcji.

Aktualizacja dodaje obsługę opcji MAXDOP dla instrukcji CREATE STATISTICS i UPDATE STATISTICS :

Ta aktualizacja dodaje obsługę opcji MAXDOP dla instrukcji CREATE STATISTICS i UPDATE STATISTICS w Microsoft SQL Server 2016 i 2017. Umożliwia to zastąpienie domyślnego ustawienia maksymalnego stopnia równoległości (MAXDOP) określonego na poziomie bazy danych lub serwera.

Uwaga: Uzyskany stopień równoległości jest ograniczany przez ustawienie grupy obciążenia MAX_DOP, jeśli używany jest Resource Governor.

Załóżmy na przykład, że używana jest tabela Sales.SalesOrderDetail i utworzono już w niej kilka statystyk. W takim przypadku poniższy skrypt aktualizuje każdą statystykę ze stopniem równoległości równym 8.

UPDATE STATISTICS Sales.SalesOrderDetail WITH MAXDOP = 8
lad2025
źródło
-3

AKTUALIZACJE STATYSTYCZNE nie mają żadnej wewnętrznej równoległości. Nie ma znaczenia, czy korzystasz z FULLSCAN lub SAMPLING. Oczywiście można uruchomić kilka poleceń UPDATE STATISTICS na raz, każde dla innego połączenia, przez wiele zadań agenta SQL lub w inny sposób. W zależności od dokładnej sytuacji ze sprzętem i danymi może się okazać, że po prostu ponowne indeksowanie tabel jest szybsze niż AKTUALIZACJA STATYSTYKI za pomocą FULLSCAN i być może lepsza opcja.

cieśnina Darina
źródło
Przepraszam za wycenę, ale nie masz pojęcia, o czym mówisz. Z tego oficjalnego dokumentu msdn.microsoft.com/en-us/library/dd535534(v=sql.100).aspx "Równoległe zbieranie statystyk dla fullscan: W przypadku statystyk zebranych za pomocą fullscan można utworzyć równolegle pojedynczy obiekt statystyk dla zarówno niepodzielone na partycje, jak i na partycje. ” Jednak nie widzę równoległości, gdy używam AKTUALIZACJI STATYSTYKI z pełnym skanem w tabeli 30 milionów wierszy
SQL Learner
Ponadto aktualizacja statystyk pobiera blokadę stabilności schematu, więc jeśli uruchomisz inne statystyki aktualizacji, poczekaj, aż zakończy się wcześniejsza.
SQL Learner
4
@SQLLearner: Bez obrazy, ale niezależnie od poprawności tej odpowiedzi, dlaczego zadajesz to pytanie, jeśli przeczytałeś ten oficjalny dokument? Daje odpowiedź na wszystkie pytania. Jeśli nie widzisz paralelizmu w konkretnym scenariuszu, edytuj pytanie, aby to stwierdzić i wszelkie inne istotne szczegóły.
Jon Seigel
Jon Seigel, znalazł i przeczytał białą księgę po opublikowaniu pytania, jednak wyszukiwanie w sieci wciąż nie jest pewne, czy statystyki aktualizacji mogą korzystać z równoległości.
SQL Learner
4
Masz rację w odniesieniu do białej księgi i sql2008. Właśnie przeczytałem ten biały papier; informacje w mojej głowie są nieaktualne. Miałem wiele problemów z sql2005, a może nawet z sql2000 w odniesieniu do reindeksowania, AKTUALIZACJI STATYSTYK, FULLSCAN vs PRÓBKA, czasu potrzebnego na zadania i stochastycznej jakości danych na stronach statystyk. Chyba cały ten ból jest teraz wodą pod mostem. Powiedziałbym, że możesz równolegle uruchamiać STATYSTYKI AKTUALIZACJI na różnych tabelach, ale wydaje się, że to więcej kłopotów niż jest to warte i możesz mieć zbyt dużo rywalizacji we / wy, aby było warto.
darin strait