
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
| 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.