Dlaczego statystyki aktualizacji pełnego skanowania wykorzystują 100% procesora na SQL Server 2014, kiedy zużywa może 20% procesora na SQL Server 2008 R2 dla tych samych tabel z podobnymi możliwościami sprzętowymi?
Patrzyłem na MAXDOP
inne opcje i naprawdę nie widziałem niczego, co by się wyróżniało. Zdaję sobie sprawę, że mogą istnieć ustawienia, które mogą to powodować, ale ustawienia są bardzo podobne dla obu baz danych (na przykład MAXDOP
wynosi 4 dla obu, przy czym oba mają wiele rdzeni). Oba są wersją Enterprise Edition.
Czy w programie SQL Server 2014 i SQL Server 2008 R2 jest coś „innego”, co mogłoby to wyjaśnić? Mam opcję pamięci na 90% dla obu serwerów. Masz jakieś przemyślenia na temat tego, czego szukać?
Raz w tygodniu uruchamiam statystyki aktualizacji z pełnym skanowaniem (100%) na dwóch serwerach przy użyciu SQL Server 2008 R2 / SP3 i SQL Server 2014 / SP2, a bazy danych mają tę samą strukturę. Na serwerze 2008 R2 statystyki aktualizacji dwóch bardzo dużych tabel zajmują kilka godzin, czego się spodziewam, ale procesor pozostaje w użyciu przez około 20%. Na serwerze 2014 procesor przechodzi w 100% na około 40 minut. Tabele są nieco mniejsze na serwerze 2014. Widzę to za pomocą menu analizy SQL Monitor.
Oto dane wyjściowe pliku dziennika Ola na serwerze SQL 2014, procesor przechodzi w 100% z około 2:10 do 2:45:
Date and time: 2017-06-24 02:10:20
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000005_15502E78] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:07:48
Date and time: 2017-06-24 02:18:08
Date and time: 2017-06-24 02:18:08
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000006_15502E78] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:32:22
Date and time: 2017-06-24 02:50:30
Oto dane wyjściowe pliku dziennika Ola na serwerze SQL 2008 R2 dla dwóch powyższych statystyk, ale procesor może wynosić może 15%:
Date and time: 2017-06-24 03:30:32
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000003_0425A276] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:05:00
Date and time: 2017-06-24 03:35:32
Date and time: 2017-06-24 03:35:32
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000004_0425A276] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:52:31
Date and time: 2017-06-24 04:28:03
Nie mogę uruchomić ich z serwerem maxdop = 1, ponieważ eliminuje to generowanie wszystkich planów równoległych, co może zaszkodzić aplikacji. Planuję pójść w przeciwnym kierunku i zwiększyć go do 8 (na pudełku jest 16 rdzeni) i zobaczyć, co się stanie. Może działać szybciej, aby skrócić czas ustalania procesora. To zadanie działa, gdy użytkownicy w większości znikają.
źródło
tempdb
konfiguracja jest taka sama? Można go używać, gdyUPDATE STATISTICS
jest uruchomiony, więc może to również stanowić problem.Odpowiedzi:
Aktualizacje statystyk mogą przebiegać równolegle w oparciu o wiele różnych opcji w SQL Server:
W późniejszych wersjach SQL Server (2016 i nowszych) jest to jeszcze bardziej skomplikowane:
Jak zauważyłeś, twój 2008R2 będzie jednowątkowy, podczas gdy 2014 będzie wielowątkowy (w ten sposób kończy się szybciej, ale maksymalizuje procesor podczas pracy).
Aby znaleźć odpowiednią równowagę dla swoich statystyk, zastanów się:
źródło
Odpowiedź wiki społeczności :
Najlepsze przypuszczenie: plan wybrany do aktualizacji statystyk jest albo równoległy, albo bardziej równoległy, na polu 2014 niż na polu 2008 R2.
Równoległe statystyki aktualizacji
fullscan
istnieją od 2005 r., A statystyki próbkowane od 2016 r., Patrz Dodatki do Optymalizatora zapytań w SQL Server 2016 autorstwa Gjorgji Gjeorgjievski na blogu silnika bazy danych SQL Server.Jeśli masz wersję Enterprise, możesz użyć narzędzia Resource Governor, aby ograniczyć użycie procesora przez zadanie konserwacji.
Rozważ także głosowanie na sugestię Połącz Dodaj
MAXDOP
parametr do aktualizacji statystyk przez Javiera Villegasa.Powiązane pytania i odpowiedzi: Aktualizacja statystyk równoległych
źródło