github twitter linkedin email
Performance Monitor Counter Reference

AreaObjectCounterInstanceThresholdCommentsReference
MemoryMemoryAvailable Mbytesna> 100MBAvailable Physical RAM on the box 
MemoryMemoryFree System Page Table Entriesna> 7000Free System Page Table Entries is the number of page table entries not currently in use by the system. If < 7000, consider removing /3GB. 
MemoryMemoryPages/secna< 50Pages/sec is the rate at which pages are read from or written to disk to resolve hard page faults. This counter is a primary indicator of the kinds of faults that cause system-wide delays and shouldn’t consistently above 0 
NetworkNetwork InterfaceBytes Received/secnic in use by sqlservrnaShows the byte rate at which information is received over each network adapter. The bytes used for data packet framing are also counted and included in the valuehttps://www.sqlshack.com/sql-server-network-performance-metrics-important-metrics/
NetworkNetwork InterfaceBytes Sent/secnic in use by sqlservrnaShows the rate at which bytes are sent over each network adapterhttps://www.sqlshack.com/sql-server-network-performance-metrics-important-metrics/
NetworkNetwork InterfaceBytes Total/secnic in use by sqlservr< 50 % Current Bandwith - 100 % means maximum network capacityIt is the byte rate at which data is received and sent over each network adapter. Framing bytes are includedhttps://www.sqlshack.com/sql-server-network-performance-metrics-important-metrics/
NetworkNetwork InterfaceCurrent Bandwidthnic in use by sqlservrnaShows an estimate of the current bandwidth of the network interface in bits per second (BPS). For interfaces that do not vary in bandwidth or for those where no accurate estimation can be made, this value is the nominal bandwidthhttps://www.sqlshack.com/sql-server-network-performance-metrics-important-metrics/
DiskPhysical Disk / Logical Disk% Idle Time> 50%The disk should not be working constantly 
DiskPhysical Disk / Logical DiskAvg. Disk Queue LengthNoneBe careful when using old thresholds of 2 with SQL Server and SANs.  This value can be much higher than 2.  Do not rely solely on this counter to diagnose an IO problem 
DiskPhysical Disk / Logical DiskAvg. Disk sec/Read( < .005 excellent; .005 - .010 Good; .010 - .015 Fair; > .015 investigate)Measure of read latency on the disk. Lower values are better however this can vary and is dependent on the size and nature of the I/Os being issued. Numbers also vary across different storage configurations (cache size/utilization can impact this greatly).https://blogs.msdn.microsoft.com/askjay/2011/07/08/troubleshooting-slow-disk-io-in-sql-server/
DiskPhysical Disk / Logical DiskAvg. Disk sec/Transfer( < .005 excellent; .005 - .010 Good; .010 - .015 Fair; > .015 investigate)Measures average latency for read or write operations 
DiskPhysical Disk / Logical DiskAvg. Disk sec/Write( < .005 excellent; .005 - .010 Good; .010 - .015 Fair; > .015 investigate)Measure of write latency on the disk. Lower values are better however this can vary and is dependent on the size and nature of the I/Os being issued. Numbers also vary across different storage configurations (cache size/utilization can impact this greatly). 
DiskPhysical Disk / Logical DiskDisk Bytes/secNoneUsed to determine bandwidth total bandwidth utilization 
DiskPhysical Disk / Logical DiskDisk Read Bytes/secNoneUsed for determine bandwidth utilization for Read Ops 
DiskPhysical Disk / Logical DiskDisk reads/secNoneNumber of read IOPs, Raid 0 – I/Os per disk = (reads + writes) / number of disks, Raid 1 – I/Os per disk = [reads + (2 * writes)] / 2, Raid 5 – I/Os per disk = [reads + (4 * writes)] / number of disks, Raid 10 – I/Os per disk = [reads + (2 * writes)] / number of diskshttps://blogs.msdn.microsoft.com/askjay/2011/07/08/troubleshooting-slow-disk-io-in-sql-server/
DiskPhysical Disk / Logical DiskDisk Transfers/secNoneNumber of read and write IOPs (used to compare against capacity of storage subsystem) 
DiskPhysical Disk / Logical DiskDisk Write Bytes/secNoneUsed to determine bandwidth utilization for Write Ops 
DiskPhysical Disk / Logical DiskDisk writes/sec*NoneNumber of write IOPs, Raid 0 – I/Os per disk = (reads + writes) / number of disks, Raid 1 – I/Os per disk = [reads + (2 * writes)] / 2, Raid 5 – I/Os per disk = [reads + (4 * writes)] / number of disks, Raid 10 – I/Os per disk = [reads + (2 * writes)] / number of diskshttps://blogs.msdn.microsoft.com/askjay/2011/07/08/troubleshooting-slow-disk-io-in-sql-server/
CPUProcess% Privileged Timesqlservr.exe< 10% , or maximum 30% of the % Total Processor Time% Privilege Time counter shows how much time the processor spends on executing non-user processes, i.e. privilege (kernel) mode operations. If (Process (sqlservr)% Privileged time/No of Procs) is above 30%, ensure that KB 976700 is applied for Windows 2008 R2https://www.sqlshack.com/sql-server-processor-performance-metrics-part-2-processor-user-time-processor-privilege-time-total-times-thread-metrics/
CPUProcess% Processor Time_Total,!> 80% during normal operationGroups the activity of all the processors together to report the total performance of the entire systemhttps://www.sqlshack.com/sql-server-processor-performance-metrics-part-2-processor-user-time-processor-privilege-time-total-times-thread-metrics/
MemoryProcessPage Faults/sec_Total,< a few hundred is desirable, in the thousands acceptable if other memory counters are OKA page fault occurs when a program requests an address on a page that is not in the current set of memory resident pageshttps://www.sqlshack.com/sql-server-memory-performance-metrics-part-1-memory-pagessec-memory-page-faultssec/
CPUProcessor% Privileged Time_Total< 30%Amount of total CPU usage in kernel mode across all processors. Processor Time = Privileged Time + User Timehttps://blogs.technet.microsoft.com/perfguide/2010/09/28/user-mode-versus-privileged-mode-processor-usage/
CPUProcessor% Processor Time_Total< 80%Amount of total CPU usage across all processorshttps://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc938603(v=technet.10)
CPUProcessor% User Time_Total< 80%Amount of total CPU usage in user mode across all processorshttps://blogs.technet.microsoft.com/askperf/2008/01/15/an-overview-of-processor-bottlenecks/
MemorySQL Server:Access MethodsPage Splits/secna< 20 per 100 batch requestsNumber of 8k pages that filled and split into two new pageshttps://www.youtube.com/watch?v=T6eoqf6Y_VE
MemorySQL Server:Buffer ManagerBuffer Cache Hit Rationa> 98%Indication of how often SQL Server is finding data pages in the buffer pool. For most applications, this value should be 90 or higher, indicating that most data requirements are being serviced from the cache. A lower value can indicate a memory bottleneck or a poorly designed application 
MemorySQL Server:Buffer ManagerCheckpoint pages/secnanaShows the number of pages that are moved from buffer to disk per second during a checkpoint processhttps://www.sqlshack.com/sql-server-memory-performance-metrics-part-6-memory-metrics/
MemorySQL Server:Buffer ManagerDatabase Pages (or Free Pages if < SQL2012)na> 640Measure of how many free pages are in the buffer pool for use 
MemorySQL Server:Buffer ManagerLazy Writes/secna< 20Measure of when the lazy writer thread must clear up buffers to free space for pages - inducing IO 
MemorySQL Server:Buffer ManagerPage Life Expectancyna> ((MAXBP(MB)/1024)/4)*300Duration, in seconds, that a page resides in the buffer pool. Indicates pressure on memory as data pages are flushed to disk - inducing IOhttps://blogs.msdn.microsoft.com/mcsukbi/2013/04/11/sql-server-page-life-expectancy/
SQLSQL Server:General StatisticsUser ConnectionsnanaCounts the number of users currently connected to SQL Server 
SQLSQL Server:LatchesAverage Latch Wait Time (ms)na~Average latch wait time (in milliseconds) for latch requests that had to wait 
SQLSQL Server:LatchesLatch Waits/secna(Total Latch Wait Time) / (Latch Waits/Sec) < 10Number of latch requests that could not be granted immediately 
SQLSQL Server:LatchesTotal Latch Wait Time (ms)na(Total Latch Wait Time) / (Latch Waits/Sec) < 10Total latch wait time (in milliseconds) for latch requests in the last second 
SQLSQL Server:LocksLock Timeouts (timeout > 0)/secExtent0Shows the number of locks per second that timed out 
SQLSQL Server:LocksLock Wait Time (ms)ExtentA high value indicates here might be long-running or ineffiecient transactions that are causing lock contentionThe total wait time in milliseconds that a process spends waiting for another process to release a lock.  
SQLSQL Server:LocksLock Waits/secExtentA high value indicates here might be long-running or ineffiecient transactions that are causing lock contentionRepresents the total number of lock requested generated per second for which a process had to wait before a lock request was granted 
AppSQL Server:LocksNumber of Deadlocks/secDatabase> 1 would require investigatingThe number of lock requests per second that resulted in deadlocks 
MemorySQL Server:Memory ManagerMemory Grants Pendingna> 0 is cause for concernMemory Grants Pending displays the total number of SQL Server processes that are waiting to be granted workspace in the memory 
MemorySQL Server:Memory ManagerTarget Server Memorynahigh or rising value indicates insufficient memory  
MemorySQL Server:Memory ManagerTotal Server Memoryna~=Physical RamIf this value is relatively high in comparison to total system memory, it’s a good indicator that you should install more memory 
MemorySQL Server:Plan CacheCache PagesSQL Plans2000Prefer stable values, otherwise cache thrash may be occurring 
AppSQL Server:SQL StatisticsBatch Requests/secnaOLTP workloads: server should support ~2,500/s/coreNumber of Transact-SQL command batches received per second. This statistic is affected by all constraints (such as I/O, number of users, cache size, complexity of requests, and so on). High batch requests mean good throughput.https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-statistics-object?view=sql-server-2017
AppSQL Server:SQL StatisticsSQL Compilations/secnaif compiles > 10% of Batch Requests, then app may not be caching effectivelyNumber of SQL compilations per second. Indicates the number of times the compile code path is entered. Includes compiles caused by statement-level recompilations in SQL Server. After SQL Server user activity is stable, this value reaches a steady state.https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-statistics-object?view=sql-server-2017
AppSQL Server:SQL StatisticsSQL Recompilations/secnaRecompiles > 10% of Compilations should be investigatedNumber of statement recompiles per second. Counts the number of times statement recompiles are triggered. Generally, you want the recompiles to be low.https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-statistics-object?view=sql-server-2017
SQLSQL Server:Wait StatisticsLock waitsAverage wait time (ms)?A lock wait occurs when a transaction tries to obtain a lock on a resource that is already held by another transactionhttps://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-wait-statistics-object?view=sql-server-2017
DiskSQL Server:Wait StatisticsLog write waitsAverage wait time (ms)100 - 800This wait type is when a thread is waiting for a log block to be written to disk by an asynchronous I/O. A log block is written to disk when: A transaction commits (unless it is set to be delayed durable in SQL Server 2014 and above)https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-wait-statistics-object?view=sql-server-2017
NetworkSQL Server:Wait StatisticsNetwork IO waitsAverage wait time (ms)?Statistics relevant to wait on network IO 
DiskSQL Server:Wait StatisticsNon-Page latch waitsAverage wait time (ms)?Statistics relevant to non-page latches 
DiskSQL Server:Wait StatisticsPage IO latch waitsAverage wait time (ms)?Statistics relevant to page IO latches 
DiskSQL Server:Wait StatisticsPage latch waitsAverage wait time (ms)?Statistics relevant to page latches, not including IO latches 
CPUSQL Server:Wait StatisticsWait for the workerAverage wait time (ms)?Statistics relevant to processes waiting for worker to become availablehttps://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-wait-statistics-object?view=sql-server-2017
CPUSystemProcessor Queue Lengthna< 2Current Depth of the thread Scheduler Ready Queuehttps://blogs.technet.microsoft.com/askperf/2008/01/15/an-overview-of-processor-bottlenecks/
NetworkTCPv4Connection Failuresna?The number of connections that have failed since the service was started (regardless of when you started perfmon). https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc787094(v=ws.10)
vCPUVM% Processor Timena? https://sqlperformance.com/2017/05/monitoring/troubleshooting-cpu-vmware
vCPUVMEffective VM Speed in MHzna? https://sqlperformance.com/2017/05/monitoring/troubleshooting-cpu-vmware
vCPUVMHost processor speed in MHzna? https://sqlperformance.com/2017/05/monitoring/troubleshooting-cpu-vmware
vMemoryVMMemory Active in MBnaShould match Total Server Memory? https://sqlperformance.com/2017/05/monitoring/troubleshooting-cpu-vmware
vMemoryVMMemory Ballooned in MBna0The Memory Ballooned in MB counter tells how much memory has been reclaimed from the guest VM by the balloon driver due to memory overcommit on the host, which will cause SQL Server to reduce memory usage to respond to memory pressure in Windows caused by the balloon driver inflating to take memory away from the VMhttps://sqlperformance.com/2017/05/monitoring/troubleshooting-cpu-vmware
vMemoryVMMemory Swapped in MBna0The Memory Swapped in MB counter is tracking how much memory was paged to disk by the host hypervisor due to memory overcommit on the host that couldn’t be resolved by ballooning VM guests with the balloon driverhttps://sqlperformance.com/2017/05/monitoring/troubleshooting-cpu-vmware