Question

I have been researching dozens of sites regarding MAXDOP but I seem to be missing something basic. MAXDOP=0 enables SQL to use all available CPU's. MS recommended settings is to set MAXDOP = number of CPU's if less than 8, and MAXDOP = 8 if 8 or more CPU's (noted, there are some finer points, e.g., NUMA, etc., but this is the basic guidance.) If MAXDOP=0 enables all CPU's and a system has 8 or less CPU's, how is a setting of MAXDOP=0 different from setting MAXDOP=#CPU's? Don't they both result in all x CPU's being available? I can see where this makes perfect sense if # of CPU's>8.

Thanks!

Was it helpful?

Solution

MAXDOP=0 enables SQL to use all available CPU's. - This is true upto 64 logical processors . If you have more like 128 MAXDOp=0 will still only use 64 logical processors.

For cores < =8 you will still need to check on hyper threading enabled or not as that is also a factor that counts here.

Also for cores less than or equal to 8 on single numa , ideally is asked to keep as # of processors which is where confusion arises. Ideally in today's world its very rare to find such servers because if you are having issues on less than 8 core and looking to set MAxDOP you have a bigger problem.

But yes for less than 8 more or less will be same. But point to note is query process may or may not use all cores even when set to that MAXDOP. Also this setting should be checked in parallel with Cost threshold of parallelism as well

Licensed under: CC-BY-SA with attribution
Not affiliated with dba.stackexchange
scroll top