I have been trying to understand more in-depth how the resource governor resource pool limits work in conjunction with multiple user defined pools.
I've been trying to follow along the table in this MS doc: Resource Governor Resource Pool
But the formula explanations are a little vague (to my eyes) so I'm trying to make sure I am calculating the effective max and shared % numbers correctly.
The formulas in the comment column are for calculated effective max. Shared % seems fairly straightforward and dependent on the accuracy of the effective max. My questions are as follows:
The shared part of the pool is used to indicate where available resources can go if resources are available. However, when resources are consumed they go to the specified pool and are not shared. This may improve resource utilization in cases where there are no requests in a given pool and the resources configured to the pool can be freed up for other pools.
Lastly, the documentation mentions extreme cases of pool configuration and calls this out:
All pools have zero minimums. All the pools compete for available resources and their final sizes are based on resource consumption in each pool. Other factors such as policies play a role in shaping the final pool size.
Is that an accurate summation of the proposed pool configuration I have screencapped above? Hypothetically, this pool configuration would then allow the server to max out CPU and not meter CPU utilization as I intend, correct?
Thanks for the help.
Do user defined resource pools consider the default pool in their calculations?
Yes, they do. You can verify it by editing the minimum CPU for the
default pool and trying to add another pool later that exceeds the sum of 100. If you tried, you should see the error Sum of the minimum CPU percentages must not exceed 100:
Just be careful if you decide to use this pool in production with a configuration different from the default one as it receives all the process that was not specified to another existing pool.
Is it nonsensical as I believe for the SUM of all calculated shared % to be >100%? The MS examples all fall below 100%.
There's a difference between the
MIN% and the
Calculated Shared % concepts regarding the Resource Pool:
MIN%is an amount of CPU that once you define for a pool, it's not gonna be available for any other. So, if you define 5 for Pool B, you only have 95 that can be used for other pools. Those 5 won't be shared. That sum is calculated among all existing pools.
Calculated Shared %is the difference between the
MAX%on the same pool, not among all existing pools as above. Pool B was defined with a
MAX%of 10, then you have to subtract 5 (the amount it won't share with anyone) from 10 (the max amount of CPU it's supposed to use if available and not required from some other pool).
Could someone please explain this blurb on shared % from the MS docs, I'm not fully understanding what the shared % calculation is supposed to represent:
It's related to what I said before: the
MIN% value states how much CPU a pool owns and won't borrow to any other pool even if it's not processing anything and the 5% CPU is idle while the whole instance is on peak time consuming 95% and starving for 5% more. Share on the context of that excerpt means the difference between the
MIN% and the
MAX% of the same pool. That's why Pool C can share 50% and it means that if Pool C was idle, it would release all the CPU it is allowed to use so that other pools can consume it.
External links referenced by this document: