Najlepsze praktyki dotyczące równoległości

9

Jakie są najlepsze praktyki z ogólnymi ustawieniami równoległości? Wiem, że SQL Server domyślnie 0używa wszystkich dostępnych procesorów, ale w jakim przypadku chciałbyś zmienić to domyślne zachowanie?

Pamiętam, że gdzieś przeczytałem (będę musiał poszukać tego artykułu), że w przypadku obciążeń OLTP powinieneś wyłączyć równoległość (ustaw maxdop na 1). Nie sądzę, że całkowicie rozumiem, dlaczego to zrobiłeś.

Kiedy utrzymasz maxdop do SQL Server (0)? Kiedy wyłączysz równoległość (1)? Kiedy jawnie podasz maxdop konkretnej liczbie procesorów?

Co powoduje paralelizm?


źródło

Odpowiedzi:

11

Zwykle nie chcesz wyłączać równoległości, ponieważ spowoduje to również wyłączenie zadań administracyjnych. Najlepszym rozwiązaniem jest naprawienie zapytań powodujących równoległość poprzez dodanie lub naprawienie indeksów lub pełne wprowadzenie zmian w schemacie.


Na podstawie zaktualizowanych pytań ...

Niektóre osoby zmienią MAXDOP na 1 dla aplikacji zbudowanych przez dostawców, ponieważ nie mogą kontrolować bazy danych ani schematu i nie chcą, aby jedno zapytanie przejęło cały system.

Osobiście zawsze utrzymuję MAXDOP na poziomie 0, z wyjątkiem rzadkich przypadków.

Równoległość jest powodowana przez pojedynczą operację w ramach planu wykonania, której koszt wykonania przekracza ustalone wcześniej ustawienie (próg kosztu dla ustawienia równoległości). Gdy tak się stanie, SQL Server uruchomi się równolegle, dzięki czemu może wielowątkowo zażądać, próbując przyspieszyć proces. Domyślna wartość progu kosztu dla równoległości wynosi 5. Na wielu platformach OLTP będziesz chciał podnieść ją do 30 lub 40, aby równoległość pojawiła się tylko w przypadku naprawdę drogich zapytań.

mrdenny
źródło
4

Nigdy nie widziałem potrzeby wyłączania lub modyfikowania ustawień równoległości przez cały czas z SQL Server (ostatnie tysiąclecie, SQL Sever 6.5)

W odpowiedzi na odpowiedź @StanleyJohns ...
System OLTP z krótkimi, ostrymi zapytaniami nigdy nie powinien przekroczyć progu kosztów ( „próg kosztów dla równoległości” ), więc nie powinno mieć znaczenia. Jeśli masz jakieś zapytania, które idą równolegle, to dlaczego miałbyś je ograniczać na podstawie czegoś niepotwierdzonego

Nie widziałem jeszcze czystego systemu OLTP. Skrajnie, być może, ale przeciętny system też o tym informuje; czy to w ciągu dnia, czy w ciągu nocy. Te zapytania są bardziej prawdopodobne, że będą równoległe i skorzystają z nich.

Przy tak wielu dostępnych obecnie rdzeniach procesora, prawdopodobnie można ustawić globalny „maksymalny stopień równoległości”, jeśli można zmierzyć i zauważyć różnicę.

Tak jak powiedziałem, proponuję, aby nic nie robić . Podobne do @mrdenny, ale dołączam „nie ma czegoś takiego jak czysty system OLTP”

Mówiąc o tym, może być pewien przebieg, który powoduje wyłączenie rdzeni hiperwątkowych na poziomie BIOS-u, ale to inne pytanie ...

Zobacz także

gbn
źródło
3

Co powoduje paralelizm ?: Istnieje ustawienie o nazwie cost threshold for parallelism. Po przekroczeniu tego progu stosowana jest równoległość (jeśli spełnione są warunki wstępne).

Charakter systemów OLTP polega na dużej liczbie szybkich i krótkich transakcji. Korzystanie z równoległości czasami wydłuża czas przetwarzania zapytania, ponieważ zapytanie zostanie podzielone, aby być przetwarzane równolegle, a następnie ponownie połączone przed powrotem. Dlatego zobaczysz sugestie, aby ustawić maxdop na 1.

Jedną z zalet ustawienia maxdop na 1 jest to, że równoległość jest domyślnie wyłączona, ale można ją włączyć na poziomie zapytania za pomocą query hints.

W przypadku systemów hurtowni danych lub systemów OLAP, w których zwracane są duże zestawy wyników, rozdzielenie zapytania przy użyciu równoległości może być korzystne. Dzięki temu zapytanie może wykorzystać dostępne rdzenie, aby skrócić czas przetwarzania zapytania.

StanleyJohns
źródło
2

Widziałem złożone zapytanie podzielone na wiele procesów, którego wykonanie zajmuje wiele godzin - zwykle można to zobaczyć w sp_who2 jako wiele wpisów o tym samym spid.

Zmiana na maxdop 1 i wykonanie zapytania w mniej niż minutę.

Lekcja jest taka, że ​​silnik nie zawsze robi to dobrze, jeśli chodzi o równoległość.

Jimbo
źródło
0

Mamy wiele serwerów z 4 rdzeniami, a niektóre z 8 rdzeniami. Polecam przy tak niewielu rdzeniach, aby równoległość (MAXDOP) była ustawiona na 1, aby uniknąć oczekiwania na procesor (a także problemy z przekroczeniem limitu czasu) dla użytkowników systemów OLTP. W przypadku serwerów OLAP lub raportujących z tak małą liczbą rdzeni zalecam ustawienie MAXDOP na 2 i ustawienie Próg kosztów na 30 (może to być wyższy lub nieco niższy w twoim scenariuszu), aby tylko najcięższe zapytania korzystały z równoległości.

Todd
źródło