监控范围 | 计数器 | 说明 |
CPU | \Processor(_Total)\% Processor Time | 与 Processor Information\% Processor Time一样。总体看CPU是否很忙。 若忙,接着再看sqlservr进程的CPU占用情况,确定是否是SqlServer消耗CPU。 |
\Processor(_Total)\% Interrupt Time | 处理器在实例间隔期间接受和服务硬件中断的时间 (CPU花在处理中断上的时间的百分比)。 如果这个值超过50%的处理器时间, 你就很可能遇到了一个硬件问题。 | |
\System\Processor Queue Length | 就绪线程在等待分配CPU资源所排队列的长度。多处理器的计算机只有一个处理器队列。 如果持续一段时间大于(处理器个数+1)个数的值,说明CPU堵塞 | |
\System\Threads | 当前计算机线程数。 | |
\System\Context Switches/sec | 线程在处理器中的切换速率,可了解到系统的繁忙程度。 对比日常记录,较多的话,考虑更快是CPU。 如果 Processor Queue Length 为0,可以不必担心。 | |
\Process(sqlservr)\% Privileged Time | 进程调用 Windows 系统服务时,此服务经常在特权(内核)模式运行, 以便获取对系统专有数据或硬件的访问。如果值很高,可能系统服务遇到问题。 | |
\Process(sqlservr)\% Processor Time | sqlservr进程线程使用处理器执行指令所花的时间百分比。 Cpu 高时可确定是否是 sqlserver 进程引起的还是系统其它进程引起的。 | |
\Process(sqlservr)\Thread Count | 实例工作线程数。参考 sys.dm_os_threads | |
\Process(sqlservr)\Virtual Bytes | 进程可使用的虚拟空间(包括物理内存和页面文件),似乎没多大意义。 | |
\Process(sqlservr)\Working Set | 实例工作集(专用Private Bytes + 共享) | |
\Process(sqlservr)\Private Bytes | 实例已提交的专用内存,实际已经分配的,不共享,但可能使用了页面文件。 | |
MEMORY | \Memory\Available Mbytes | 服务器可用内存。 |
\Memory\Pages/sec | 为解决硬页错误从磁盘读取或写入磁盘的速度(每秒钟内存和磁盘之间交换的页面数)。 该数据很高时,再与Buffer Hit Cache Ratio判断是数据库还是其它程序引起的。 | |
\Memory\Transition Faults/sec | 为解决软页错误从内存其它地方读取的速度。在内存操作,影响不大。 | |
\SQLServer:Buffer Manager\Database pages | 缓冲池(buffer pool)中数据库使用的页面数 | |
\SQLServer:Buffer Manager\Stolen pages | 缓冲池(buffer pool)中用于其他服务(如过程缓存)的页数 | |
\SQLServer:Buffer Manager\Free pages | 缓冲池(buffer pool)中未使用的页面数。 可确定内存是否充足以调优命中率 Buffer Hit Cache Ratio | |
\SQLServer:Buffer Manager\Target pages | 该实例数据库可使用缓冲池(buffer pool)的最大页面数。 | |
\SQLServer:Buffer Manager\Total pages | 该实例数据库已使用缓冲池的页面数,最大为 Target pages 。 | |
\SQLServer:Memory Manager\Memory Grants Pending | 等待内存授予的进程数。应接近为0,内存充足不需要等待分配内存空间。 | |
\SQLServer:Memory Manager\Lock Memory (KB) | 维护锁开销的动态内存。内存不足影响锁的申请,锁太多也消耗过多内存。 | |
\SQLServer:Memory Manager\Connection Memory (KB) | 维护连接占用的动态内存。内存不足影响连接,连接过多也消耗过多内存。 | |
\SQLServer:Buffer Manager\Buffer cache hit ratio | 缓存命中率,在缓冲区高速缓存中找到而不需要从磁盘中读取(物理I/O)的页的百分比。 可判断内存是否充足,最好保证95%以上。 | |
\SQLServer:Buffer Manager\Checkpoint pages/sec | 每秒钟将内存脏数据刷新到磁盘的次数。 与内存无关,DML频繁时改值会变大,主要影响IO写入。 | |
\SQLServer:Buffer Manager\Lazy writes/sec | 每秒钟由惰性写入器将内存脏数据写入到磁盘的此时。 与内存相关,内存不足时会发生,同时将脏数据页释放使内存增加。 | |
\SQLServer:Buffer Manager\Page life expectancy | 页的生命期,数据页在内存中的驻留时间。内存足够时,页面驻留更久而不被释放。 | |
\Paging File(\??\C:\pagefile.sys)\% Usage | 页面文件(pagefile.sys)的使用比例,可查看文件确定用了多大的虚拟内存。 虚拟内存=物理内存+页面文件,物理内存不足时会扩展使用到页面文件。 | |
\Paging File(\??\C:\pagefile.sys)\% Usage Peak | 页面文件(pagefile.sys)的峰值比例,即可确定使用的最大值。 | |
IO | \LogicalDisk(C:)\Free Megabytes \LogicalDisk(C:)\% Free Space | 磁盘可用空间 磁盘剩余空间百分比 |
\LogicalDisk(C:)\Avg. Disk Read Queue Length | 逻辑磁盘平均读队列长度。可确定哪个逻辑盘有读瓶颈。应为0。 | |
\LogicalDisk(C:)\Avg. Disk Write Queue Length | 逻辑磁盘平均写队列长度。可确定哪个逻辑盘有写瓶颈。应为0。 | |
\LogicalDisk(C:)\Current Disk Queue Length | 逻辑磁盘当前状态的队列长度。状态值,应小于2。 | |
\LogicalDisk(C:)\Disk Read Bytes/sec | 逻辑磁盘每秒读取的字节数。衡量I/O吞吐量。 | |
\LogicalDisk(C:)\Disk Write Bytes/sec | 逻辑磁盘每秒写入的字节数。衡量I/O吞吐量。 | |
\LogicalDisk(C:)\Disk Reads/sec | 逻辑磁盘每秒读取的次数。衡量I/O吞吐量。(Read Bytes/sec)/(Reads/sec) | |
\LogicalDisk(C:)\Disk Writes/sec | 逻辑磁盘每秒写入的次数。衡量I/O吞吐量。 | |
\PhysicalDisk(0 C:)\Avg. Disk sec/Read | 物理磁盘平均读取时间。应在10ms以内。 | |
\PhysicalDisk(0 C:)\Avg. Disk sec/Write | 物理磁盘平均写入时间。应在10ms以内。 | |
NETWORK | \Network Interface(网卡名称)\Bytes Received/sec | 网卡每秒发送字节数。可确定带宽用量及购买;可查看流量是否异常。 |
\Network Interface(网卡名称)\Bytes Sent/sec | 网卡每秒接收字节数。可确定带宽用量及购买;可查看流量是否异常。 | |
\Network Interface(网卡名称)\Output Queue Length | 网卡输出数据列队(数据包)的长度。应为0。确定网络是不是有问题。 | |
DATABASE | \SQLServer:SQL Statistics\Batch Requests/sec | 每秒批处理请求数 |
\SQLServer:SQL Statistics\SQL Compilations/sec | 每秒SQL编译次数。 相当于首次创建或执行语句导致编译,编译和重编译都消耗 CPU 和内存资源。 编译消耗CPU,编译完成后计划驻留在内存。 | |
\SQLServer:SQL Statistics\SQL Re-Compilations/sec | 每秒SQL重编译次数。有不能重用的执行计划,加参数使重用,或强制参数化。 | |
\SQLServer:General Statistics\Processes blocked | 当前堵塞的进程数。Sys.sysprocess 可查看,可使用策略触发保存堵塞记录。 | |
\SQLServer:General Statistics\User Connections | 当前连接数。select COUNT(*) from sys.sysprocesses where spid>50 | |
\SQLServer:General Statistics\Active Temp Tables | 当前正在使用的临时表或者表变量。 | |
\SQLServer:Access Methods\Full Scans/sec | 每秒表或索引的扫描次数。可以搜索缓存中扫描语句。(搜索语句较特殊) | |
\SQLServer:Access Methods\Workfiles Created/sec | 每秒 Workfiles 创建数量,表哈希连接或者哈希聚合需要用到。 | |
\SQLServer:Access Methods\Worktables Created/sec | 每秒 Worktables 创建数量,查询、LOB和XML变量、游标需要用到。 | |
\SQLServer:Access Methods\Page Splits/sec | 每秒由于索引页溢出而发生的页拆分数。发送较多可使用索引填充因子。 | |
\SQLServer:Locks(_Total)\Number of Deadlocks/sec | 每秒死锁数量。可打开跟踪标志 1222 和 1204 记录死锁信息。 | |
\SQLServer:Locks(_Total)\Lock Timeouts/sec | 每秒锁请求超时次数。估计对资源的并发请求较多,可以开启慢语句跟踪及优化。 | |
\SQLServer:Databases(_Total)\Active Transactions | 活动是事务数。(如 bengin tran 中执行 DML 操作,select 排除) | |
\SQLServer:Databases(_Total)\Log File(s) Size (KB) | 监控所有数据库事物日志的大小。 最好是分别监控每个数据库的事务日志大小,而不是全部的。 可以跟踪数据库是否有大的事务操作。 | |
\SQLServer:Databases(_Total)\Log Flushes/sec | 每秒日志缓存记录刷新到磁盘的次数。Commit、rollback 或 Checkpoint 等引起。 | |
\SQLServer:Databases(_Total)\Transactions/sec | 数据库每秒事务数 |
之前的总结:SqlServer 主要监控的性能计数器