What is the explanation for this apparent contradiction? The Help says "hyperthreaded processors are not counted for intra-query parallelism" but I regularly see 8 INT:Exchange connections (and 8 subtrees in the plans) when intra-query parallelism is in full swing on a chips like the Intel i7-4790 which have 4 hyperthreaded cores. Help: Parallelism in Queries "However, hyperthreaded processors are not counted for intra-query parallelism so you must divide the value of NumLogicalProcessorsUsed by two if the computer is hyperthreaded." Intel® Core™ i7-4790 Processor # of Cores 4 # of Threads 8 Intel® Hyper-Threading Technology Yes SELECT PROPERTY ( 'NumLogicalProcessorsUsed' ); PROPERTY('NumLogicalProcessorsUsed') '8' |
We both obviously agree that the doc's statemements on licensing and processors are difficult to understand... That being said, I guess the "not counting" really relates to the fact that a hyperthreading core is counted as one core w.r.t. licensing, see the following quote from the "per seat" license type:
Your sample machine has 4 cores and is licensed to use all 8 hyperthreads on those cores, so it is also allowed to use all 8 hyperthreads for 8 parallel operators. Since only four cores are officially licensed, you can still use 8 threads, so in my understanding, the phrase should be understood as "the (additional) hyperthreads are not counted". From a practical point of view: As your machine does use 8 logical processors according to the server properties, why should it not use all of those for parallel tasks (unless you want to limit the max_query_tasks option)... |
Hm, the full quote says:
So the "not counting" may also refer to the counting the number of licensed processors... What does happen when you set max_query_tasks to 4?
Probably also a question of comparing the server porperties LicenseType, NumLogicalProcessors(Used) and NumPhysicalProcessors(Used). I surely don't claim to fully understand those numbers.
Here is another quote from later on the same page, and it doesn't seem to have anything to do with licensing;
"the value of ActiveReq has been greater than, or equal to, the value of NumLogicalProcessorsUsed at any time in the recent past (divide the number of processors by two if the computer is hyperthreaded)"
I forgot the Licensing Rule Of Thumb which states "All discussions involving licensing are impossible to understand and should therefore be disregarded" :)
So what does sa_cpu_topology() reveal - thread values > 0 in your case?