Custom Counter Advice

This page contains descriptions of selected Windows performance counters as well as ideal counter values.

The information is useful if you use PerformanceGuard to collect data from Windows performance counters.

General Server- & Network-Related Counters

Process- & Processor-Related Counters

  • Processor(_Total)\% Processor Time
    Percentage of time when the processor isn't idle. Average should ideally be below 75%.

  • Processor(_Total)\% User Time
    Percentage of processor time that's spent in user mode, a processing mode designed for applications, etc. Average should ideally be below 75%.

  • Processor(_Total)\% Privileged Time
    Percentage of processor time that's spent in privileged mode, a processing mode with access to hardware and memory designed for operating systems and hardware drivers. Average should ideally be below 75%.

  • System\Processor Queue Length (all instances)
    Number of threads that each processor services. Useful for identifying if processor contention or high CPU utilization is caused by insufficient processor capacity. Shows the number of threads that are delayed in the Processor Ready Queue, waiting to be executed. Should ideally be below 5 per processor.

Memory-Related Counters

  • Memory\Available Mbytes
    Amount in megabytes of physical memory that's immediately available for allocation to a process or for system use. Should ideally be above 5% of the total amount of RAM.

  • Memory\% Committed Bytes In Use
    Ratio of Memory\Committed Bytes to the Memory\Commit Limit. Shows current percentage, not an average. Committed memory is physical memory in use for which space has been reserved in the paging file in case it needs to be written to disk. The commit limit is determined by the size of the paging file. If the paging file grows, the commit limit increases, and the ratio is thus reduced. Should ideally be below 80%.

.NET Framework-Related Counters

  • .NET CLR Memory(*)\% Time in GC
    Percentage of time spent in garbage collection. Average should ideally be below 10%. If not, you should consider adding some more memory.

  • .NET CLR Exceptions(*)\# of Excepts Thrown / sec
    Number of exceptions thrown per second. Includes .NET Framework exceptions as well as unmanaged exceptions converted into .NET Framework exceptions. Example: Null pointer reference exception in unmanaged code is thrown again in managed code as a .NET Framework System.NullReferenceException. Includes handled and unhandled exceptions. Should ideally be below 5% of total requests per second.

  • .NET CLR Memory(*)\# Bytes in all Heaps
    Sum of four other counters: Gen 0 Heap Size, Gen 1 Heap Size, Gen 2 Heap Size, and Large Object Heap Size. Indicates current memory allocated in bytes on garbage collection heaps.

Network-Related Counters

  • Network Interface(*)\Packets Outbound Errors
    Number of outbound packets that couldn't be sent because of errors. Should ideally be 0.

  • TCPv4\Connections Reset
    Number of times that TCP connections have directly transitioned from the ESTABLISHED state or the CLOSE-WAIT state to the CLOSED state. A growing number of resets, or an increasing rate of resets, may indicate bandwidth problems.

  • TCPv6\Connections Reset
    Same as the previous, but aimed at a later version of the TCP protocol.

ASP.NET-Related Counters

  • ASP.NET\Application Restarts
    Number of times that the application has been restarted during the lifetime of the web server. Should ideally be 0.

  • ASP.NET\Worker Process Restarts
    Number of times that a worker process has restarted. Should ideally be 0.

  • ASP.NET\Request Wait Time
    Number of milliseconds that the most recent request waited in the queue. Should ideally be 0.

  • ASP.NET Applications(*)\Requests In Application Queue
    Number of requests in the application request queue. Should ideally be 0.

  • ASP.NET Applications(*)\Requests Executing
    Number of requests currently being executed.

  • ASP.NET Applications(*)\Requests/Sec
    Number of requests executed per second.

Microsoft Exchange 2013

RPC Client Access-Related Counters

  • MSExchange RpcClientAccess\Active User Count
    Number of unique users that have been active in the last two minutes.

  • MSExchange RpcClientAccess\Connection Count
    Total number of maintained client connections.

  • MSExchange RpcClientAccess\User Count
    Number of users that are connected to the service.

  • MSExchange RpcClientAccess\RPC Requests
    Number of client requests being processed by the RPC Client Access service.

  • MSExchange RpcClientAccess\RPC Averaged Latency
    Averaged latency in milliseconds for the last 1024 packets.

  • MSExchange RpcClientAccess\RPC Operations/sec
    Rate of RPC operations per second.

HTTP Proxy-Related Counters

  • MSExchange HttpProxy(*)\MailboxServerLocator Average Latency
    Average latency in milliseconds of MailboxServerLocator web service calls.

  • MSExchange HttpProxy(*)\Average Authentication Latency
    Average time spent on authenticating Client Access server requests over the last 200 samples.

  • MSExchange HttpProxy(*)\Average ClientAccess Server Processing Latency
    Average latency in milliseconds of Client Access server processing time over the last 200 requests, not including time spent on proxying.

  • MSExchange HttpProxy(*)\Mailbox Server Proxy Failure Rate
    Percentage of connectivity failures between Client Access server in question and MBX servers over the last 200 samples.

  • MSExchange HttpProxy(*)\Requests/Sec
    Number of requests processed per second.

  • MSExchange HttpProxy(*)\Proxy Requests/Sec
    Number of proxy requests processed per second.

Information Store-Related Counters

  • MSExchangeIS Client Type\RPC Requests
    Number of RPC requests currently being executed within the information store process. Should ideally be below 70.

  • MSExchangeIS Client Type(*)\RPC Average Latency
    Averaged server RPC latency in milliseconds for the last 1024 packets on a particular protocol. Should ideally be below 50 ms for each client.

  • MSExchangeIS Store(*)\RPC Average Latency
    Averaged latency in milliseconds of RPC requests per database, calculated over all RPCs since exrpc32 was loaded. Should ideally be below 50 ms; spikes below 100 ms are acceptable.

  • MSExchangeIS Store(*)\RPC Operations/sec
    Number of RPC operations per second for each database instance.

  • MSExchangeIS Client Type(*)\RPC Operations/sec
    Number of RPC operations per second for each client type connection.

Client Access Server-Related Counters

  • MSExchange ActiveSync\Requests/sec
    Number of HTTP requests received from the client via ASP.NET per second. Useful for determining current user load based on Exchange ActiveSync request rate.

  • MSExchange ActiveSync\Ping Commands Pending
    Number of ping commands pending in queue.

  • MSExchange ActiveSync\Sync Commands/sec
    Number of sync commands processed per second. Sync commands are used by clients to synchronize items in a folder.

  • MSExchange Availability Service\Availability Requests (sec)
    Number of requests serviced per second. A request may contain multiple mailboxes. Useful for determining the rate at which Availability service requests occur.

  • MSExchange OWA\Current Unique Users
    Number of unique users logged in to Outlook Web App. Users are only removed from this counter after they log out or their session times out. Useful for determining current user load.

  • MSExchange OWA\Requests/sec
    Number of requests handled by Outlook Web App per second. Useful when you need to determine current user load.

  • MSExchangeAutodiscover\Requests/sec
    Number of Autodiscover service requests processed per second. Useful when you need to determine current user load.

  • MSExchangeWS\Requests/sec
    Number of requests processed per second. Useful when you need to determine current user load.

  • Web Service(_Total)\Current Connections
    Current number of connections established with the web service. Useful when you need to determine current user load.

  • Web Service(Default Web Site)\Current Connections
    Current number of connections established to the default website. Corresponds to the number of connections to the frontend CAS server role. Useful when you need to determine current user load.

  • WebService(_Total)\Connection Attempts/sec
    Rate at which connections to the web service are being attempted. Useful when you need to determine current user load.

  • Web Service(_Total)\Other Request Methods/sec
    Rate at which HTTP requests that don't use the OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, MOVE, COPY, MKCOL, PROPFIND, PROPPATCH, SEARCH, LOCK, or UNLOCK method are being attempted.

Workload Management-Related Counters

  • MSExchange WorkloadManagement Workloads(*)\ActiveTasks
    Number of active tasks running in the background for workload management.

  • MSExchange WorkloadManagement Workloads(*)\CompletedTasks
    Number of completed workload management tasks.

  • MSExchange WorkloadManagement Workloads(*)\QueuedTasks
    Number of workload management tasks that are queued and waiting to be processed.

Domain Controller-Related Counters

  • MSExchange ADAccess Domain Controllers(*)\LDAP Read Time
    Time in milliseconds that it takes to send an LDAP read request to the domain controller in question and get a response. Should ideally be below 50 ms; spikes below 100 ms are acceptable.

  • MSExchange ADAccess Domain Controllers(*)\LDAP Search Time
    Time in milliseconds that it takes to send an LDAP search request and get a response. Should ideally be below 50 ms; spikes below 100 ms are acceptable.

  • MSExchange ADAccess Processes(*)\LDAP Read Time
    Time in milliseconds that it takes to send an LDAP read request to the domain controller in question and receive a response. Should ideally be below 50 ms; spikes below 100 ms are acceptable.

  • MSExchange ADAccess Processes(*)\LDAP Search Time
    Time in milliseconds that it takes to send an LDAP search request and get a response. Should ideally be below 50 ms; spikes below 100 ms are acceptable.

Database-Related Counters

  • MSExchange Database ==> Instances(*)\I/O Database Reads (Attached) Average Latency
    Average time in milliseconds per database read operation. Should ideally be below 20 ms.

  • MSExchange Database ==> Instances(*)\I/O Database Writes (Attached) Average Latency
    Average time in milliseconds per database write operation. Should ideally be below 50 ms.

  • MSExchange Database ==> Instances(*)\I/O Log Writes Average Latency
    Average time in milliseconds per log write operation. Should ideally be below 10 ms.

  • MSExchange Database ==> Instances(*)\I/O Database Reads (Recovery) Average Latency
    Average time in milliseconds per passive database read operation. Should be below 200 ms.
  • MSExchange Database ==> Instances(*)\I/O Database Writes (Recovery) Average Latency
    Average time in milliseconds per passive database write operation. Should be below the read latency for the same instance.

  • MSExchange Database ==> Instances(*)\I/O Database Reads (Attached)/sec
    Number of database read operations per second for each attached database instance.

  • MSExchange Database ==> Instances(*)\I/O Database Writes (Attached)/sec
    Number of database write operations per second for each attached database instance.

  • MSExchange Database ==> Instances(*)\I/O Log Writes/sec
    Number of log write operations per second for each attached database instance.

  • MSExchange Active Manager(_total)\Database Mounted
    Number of active database copies on server.

Microsoft SQL Server

  • SQLServer:Buffer Manager\Buffer cache hit ratio
    The buffer cache hit ratio shows you how often a SQL Server is able to find queried data in its buffer cache. The higher this number the better, because it means that the SQL Server is able to get data for queries from its memory instead of reading it from disk. Ideally, this number should be 100, meaning that the SQL Server has found the required data in its memory 100% of the time. If the buffer cache hit ratio is low, it could indicate a memory problem on the SQL Server.

  • SQLServer:Buffer Manager\Page life expectancy
    Page life expectancy shows you how long (in seconds) that pages stay in the SQL Server's buffer cache. The longer a page stays in the buffer cache, the smaller is the chance that the SQL Server will need to read from disk to resolve a query. Watch this counter over time to determine what's normal in your organization. As a rule of thumb, a page life expectancy below 300 seconds (that is five minutes) could indicate that the SQL Server is short of memory.

  • SQLServer:SQL Statistics\Batch Requests/sec
    This counter shows you the number of batches that the SQL Server receives per second. The higher the number, the more queries are being executed on the SQL Server. Watch this counter over time to determine what's normal in your organization.

  • SQLServer:SQL Statistics\SQL Compilations/sec
    This counter shows you the number of times per second that the SQL Server compiles an execution plan (which is a resource-intensive operation). Compare this number with the number of batch requests per second (see the previous) to get an indication of whether the complications affect the performance of the SQL Server: Divide the number of batch requests per second by the number of compilations per second to see how many batches are on average executed per compilation. Ideally, the SQL server should use one compilation for every ten batch requests.

  • SQLServer:SQL Statistics\SQL Re-Compilations/sec
    Whenever a significant event renders the execution plan useless, the SQL Server re-compiles the execution plan (which is a resource-intensive operation). This counter shows you the number of times per second that the SQL Server has had to re-compile the execution plan. Ideally, the number of SQL re-compilations per second should be less than 10% of the number of SQL compilations per second (see the previous).

  • SQLServer:General Statistics\User Connections
    This counter shows you the number of users that were connected to the SQL Server when the sample was taken. Watch this counter over time to determine the typical number of users in your organization. When you have an idea of the typical maximum and minimum number of users in your organization, you can begin looking for times when the numbers from this counter exceed the typical maximum or go below the typical minimum. If the numbers from this counter go down while the load on the system is the same, there could be a bottleneck that prevents the SQL Server from handling the normal load..

  • SQLServer:Locks(_Total)\Lock Waits/sec
    In order to manage concurrent users, the SQL Server needs to lock resources from time to time. This counter shows you the number of times per second that the SQL Server isn't immediately able to retain a lock for a resource. Ideally, this number should be 0, meaning that no requests need to wait for a lock.

  • SQLServer:Access Methods\Page Splits/sec
    This counter shows you the number of times per second that the SQL Server needed to split a page when updating or inserting data (which is a resource-intensive operation that can lead to decreased performance due to fragmentation). Ideally, this number should be less than 20% of the batch requests per second (see the previous).

  • SQLServer:General Statistics\Processes blocked
    When a process blocks another process, the blocked process can't move forward with its execution plan until the resource that causes the wait is freed up. Ideally, this number should be 0.

  • SQLServer:Buffer Manager\Checkpoint pages/sec
    This counter shows you the number of pages written to disk by a checkpoint operation. Watch this counter over time to determine what's normal in your organization, and then watch it to see if its value increases. An increase could indicate that insufficient memory is causing pages to be flushed to disk more frequently than normal.

VMware Horizon View PCoIP Sessions

  • PCoIP Sessions General Statistics\Bytes Sent
    Total number of bytes transmitted since the start of the PCoIP session.

  • PCoIP Sessions General Statistics\Bytes Received
    Total number of bytes received since the start of the PCoIP session.

  • PCoIP Sessions General Statistics\Packets Sent
    Total number of packets transmitted since the start of the PCoIP session.

  • PCoIP Sessions General Statistics\Packets Received
    Total number of packets received since the start of the PCoIP session.

  • PCoIP Sessions General Statistics\RX Packets Lost
    Total number of received packets that have been lost since the start of the PCoIP session.

  • PCoIP Sessions General Statistics\TX Packets Lost
    Total number of transmitted packets that have been lost since the start of the PCoIP session.

  • PCoIP Sessions General Statistics\Session Duration Seconds
    Total number of transmitted packets that have been lost since the start of the PCoIP session.

  • PCoIP Sessions Network Statistics\Round Trip Latency ms
    Round trip latency between PCoIP server and PCoIP client, in milliseconds.

  • PCoIP Sessions Network Statistics\RX Packet Loss Percent
    Percentage of received packets lost during a sampling period.

  • PCoIP Sessions Network Statistics\TX Packet Loss Percent
    Percentage of transmitted packets lost during a sampling period.

  • PCoIP Sessions Network Statistics\RX BW kbit/sec
    Overall bandwidth in kilobits per second for incoming PCoIP packets averaged over the sampling period.

  • PCoIP Sessions Network Statistics\RX BW Peak kbit/sec
    Peak bandwidth in kilobits per second for incoming PCoIP packets over a one-second sampling period.

  • PCoIP Sessions Network Statistics\TX BW kbit/sec
    Overall bandwidth in kilobits per second for outgoing PCoIP packets averaged over the sampling period.

  • PCoIP Sessions Network Statistics\TX BW Active Limit kbit/sec
    Estimated available network bandwidth in kilobits per second. This statistic is updated every second.

  • PCoIP Sessions Network Statistics\TX BW Limit kbit/sec
    Transmission bandwidth limit in kilobits per second for outgoing PCoIP packets.

  • PCoIP Sessions Imaging Statistics\Imaging Active Minimum Quality
    Lowest encoded quality value on a scale from 0 to 100. This statistic is updated every second.

  • PCoIP Sessions Imaging Statistics\Imaging Bytes Sent
    Total number of bytes of imaging data that have been transmitted since the start of the PCoIP session.

  • PCoIP Sessions Imaging Statistics\Imaging Bytes Received
    Total number of bytes of imaging data that have been received since the start of the PCoIP session.

  • PCoIP Sessions Imaging Statistics\Imaging Decoder Capability kbit/sec
    Estimated processing capability of the imaging decoder in kilobits per second. This statistic is updated every second.

  • PCoIP Sessions Imaging Statistics\Imaging Encoded Frames/sec
    Number of imaging frames that were encoded over a one-second sampling period.

  • PCoIP Sessions Imaging Statistics\Imaging RX BW kbit/sec
    Bandwidth in kilobits per second for incoming imaging packets averaged over the sampling period.

  • PCoIP Sessions Imaging Statistics\Imaging TX BW kbit/sec
    Bandwidth in kilobits per second for outgoing imaging packets averaged over the sampling period.

Terminal Services

  • Terminal Services Session(*)\% Processor Time
    Total processor utilization on the system, across all processors, both logical and physical. Should not exceed 90%.

  • Terminal Services\Active Sessions
    Total number of sessions that are active, excluding disconnected sessions.

  • Terminal Services\Total Sessions
    Total number of sessions that are active, including disconnected sessions.

Search this documentation

On this page

In this section