I utilize the resource governor on my 2016 SQL Server. In prior 2016 SQL Server versions, this query:

select *
from master.sys.dm_os_performance_counters opc
where opc.object_name = 'SQLServer:Resource Pool Stats'
and counter_name = 'CPU usage target %'

Would yield the target value of CPU usage % for the resource pool based on the resource pool configuration settings and system load. However, now they are always zero.

I also used perfmon to confirm this (along with running legit queries). Does anyone know why or if this counter changed? According to the msdn article, it should still work.


3 Answers 3


After talking with Microsoft Support a few times, they finally told me this is a bug.

However, the product team said the algorithms for this particular counter in SQL Server 2016 are too complicated to fix. They will be updating the documentation to show that the counter is useless now.

Because we monitor these counters to make sure the Governor is working, I will have to come up with a home grown solution. – HunterX3


You posted a bug on this at Microsoft Connect:

SQL Server 2016 SQLServer:Resource Pool Stats:CPU usage target % Always Returns Zero - by HunterX3

Given that Microsoft didn't respond there either, it's probably a bug. Open a support case with Microsoft, and if it turns out to be a bug, they refund your support fee.


Try this and see if this gives a value other than zero:

SELECT  perfCount.object_name ,
    perfCount.counter_name ,
    CASE WHEN perfBase.cntr_value = 0 THEN 0
         ELSE ( CAST(perfCount.cntr_value AS float) / perfBase.cntr_value ) * 100
    END AS cntr_Value
FROM    ( SELECT    *
          FROM      sys.dm_os_performance_counters
          WHERE     object_name = 'SQLServer:Resource Pool Stats'
                    AND counter_name = 'CPU usage %' ) AS perfCount
                     FROM   sys.dm_os_performance_counters
                     WHERE  object_name = 'SQLServer:Resource Pool Stats'
                            AND counter_name = 'CPU usage % base' ) AS perfBase
            ON perfCount.object_name = perfBase.object_name; 
  • That query returns results, but they are not correct. Can you add some description of what you were expecting the query to do and why?
    – HunterX3
    Commented Jan 27, 2017 at 20:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.