MaxDop och Cost Threshold for Parallelism


Tag : SQL,SQL Server,Tips

Maxdop sätter enkelt beskrivet hur många cores en session får använda om SQL Server anser att frågan behöver köras parallellt, man kan styra vilka frågor som får köra parallelt genom cost threshold for parallelism.
Med parallellism menar man att många gör jobbet fortare, alltså att SQL Server optimiseraren tycker att frågan kommer gå fortare om den får hjälp av flera cores.

När man ska sätta sin MaxDop måste man se över sina numa noder se tabellen nedan.
Det är även möjligt att ange Maxdop i sin fråga detta värde kommer då vara det värde som SQL Server använder istället för det konfigurerade.

De här parametrarna sätter inte ett tak på hur många cpu:er SQL får använda det gör man istället med Affinity mask.

Här är en tabell från Microsoft som finns i en KB som du kan läsa här

Microsoft rekommendationer

Server with single NUMA node Less than 8 logical processors Keep MAXDOP at or below # of logical processors
Server with single NUMA node Greater than 8 logical processors Keep MAXDOP at 8
Server with multiple NUMA nodes Less than 8 logical processors per NUMA node Keep MAXDOP at or below # of logical processors per NUMA node
Server with multiple NUMA nodes Greater than 8 logical processors per NUMA node Keep MAXDOP at 8

Maxdop satt till 0 gör att alla cores används för parallelism, medan Maxdop = 1 gör att SQL enkom får använda en cpu, vare sig 0 som är default eller 1 är att rekommendera, dock kan det förekomma fall där dessa värden fungerar bra.

Vad är då Cost Threshold for Parallelism, det är gränsvärdet för när SQL Server ska köra en fråga med parallellism. Värdet är baserat på en uppskattad kostnad som krävs för att köra frågan på en specifik hårdvaru konfiguration, det är alltså inte en tidsenhet. Default sätts den till 5 men spannet går från 0 - 32767.

Cost threshold är inte aktuell om du kör på en maskin med en cpu, om affinity mask är satt till att begränsa SQL till endast en cpu eller om Maxdop är satt till 1.

Det är även möjligt att ange Maxdop i sin fråga detta värde kommer då vara det värde som SQL Server använder istället för det konfigurerade. De här parametrarna sätter inte ett tak på hur många cpu:er SQL får använda det gör man istället med Affinity mask.

Värdena från MS är bara en rekommendation för att komma fram till vad som är bäst för din server är att testa dig fram.



About

Det här är min digitala anteckningsbok för allt som har med databaser, automatisering och teknik att göra.
Här samlar jag alla de där skripten, lösningarna och knepen jag byggt på mig under åren – främst inom SQL Server och PowerShell.
Istället för att de ska ligga och damma i en glömd mapp delar jag med mig av dem här, så att både jag själv (när minnet sviker) och du förhoppningsvis kan spara några timmars klickande.