计数器 | 对象 | 说明 | 阈值 | 相关说明 |
Memory | Page Faults/sec | 每秒钟出错页面的平均数量(硬错误可以导致明显的拖延) | >1000 | 硬错误:Pages/sec(取读取硬盘) |
Memory | Pages/sec | 为解决硬页错误从磁盘读取或写入磁盘的速度(每秒钟内存和磁盘之间交换的页面数)(Page Input/sec>=Page Reads/sec;Page Reads/sec<=5) | >20 | 服务器上SQLServer是最主要的应用程序。如果SQLServer缓存命中率(Buffer Hit Cache Ratio)达99%以上,而Pages/sec 总是超过20,那就是其他程序引起的,建议移除这些程序。如果没有运行其他程序,SqlServer可能缺乏内存,可配置为动态内存,或增大max server memory (MB),或者增加内存。内存不足时页读取频繁,也会影响IO问题。 |
Memory | Available mbytes | 当前能够使用的物理内存(mb) | <5 | windows系统当前可用物理内存减少时,还要确定是否是其他系统进程经常消耗内存。再观察SqlServer的目标内存(Target Server Memory)和最大内存(Total Server Memory)是否在下降?同时观察Process\Working Set是否在上升,导致可能的内存泄露现象。内存不足一把会触发“惰性编写器”(Lazy write)进程,可用内存又会上升。 |
SQLServer:Buffer Manager | Buffer Cache Hit Ratio | 数据页在buffer pool中找到(而没有从磁盘读取)的百分比 | <95% | 此值一般都会达99%以上。内存不足时在buffer pool就可能找不到数据页(因为经常与磁盘交换) |
SQLServer:Buffer Manager | Page life expectancy | 数据页停留在buffer pool中没有被引用的秒数。 | <300 | 当内存充足时,数据页会一直停留在缓存中(即使很长时间不被使用),SqlServer会一直把数据页取出来放到buffer pool中,这样缓存命中率(Buffer Cache Hit Ratio)也会很高。如有内存压力,延迟写(Lazy write)会触发,无用或较久的数据页会写入磁盘或释放,Page life expectancy会突然下降。网上都说阈值为300秒。这停留时间越大越好。(公司当前数据库总大小150G,内存64G,Page life expectancy高达十几个小时) |
SQLServer:Buffer Manager | Lazy write/sec | 每秒被缓冲区管理器的惰性编写器写入的缓冲区数 | >1 | “惰性编写器”是一个系统进程,用于成批刷新脏的过期的缓冲区,使缓冲区可再次被申请和提交使用。当内存不足时,“惰性编写器”会被经常触发。一般该值都会为0. |
SQLServer:Buffer Manager | Total pages | SqlServer在buffer pool中的总页数(包括 数据页,空闲页,stolen页) | <MAX | (Total pages)*8k=(Total Server Memory) |
SQLServer:Memory Manager | Total Server Memory(KB) | SqlServer当前提交的动态内存总量(即在buffer pool中的大小,包括 数据页,空闲页,stolen页) | <MAX | 该计数器一般都等于Target Server Memory (KB),因为会一直把可用的内存都使用。若该值减少,则表示内存被其他程序或对象占用了。观察Available mbytes是否也接近于0,如是,则当前正在由其他应用程序在使用大量内存。 |
process | Private Bytes(sqlserver) | SqlServer线程已分配的专用内存 |
| 一般SqlServer都尽量使用内存,如果出现内存溢出,可以查看此计数器以确定是否为数据库引起的。 |
Process | Page File Bytes | 分页文件当前使用字节数 | >70%*Peak | 分页文件由所有进程共享,分页文件缺乏空间会阻止其他进程分配内存。如果没有分页文件,此计数器反映的是此进程在物理内存保留的、虚拟内存的当前数量。 |
Process | Page File Bytes Peak | 分页文件可使用的最大字节数 |
| 同上 |
Memory | Cache Bytes | 系统使用的物理内存数目 |
| 以下计数器的总和 |
计数器 | 对象 | 说明 | 阈值 | 相关说明 |
System | Processor Queue Length | 就绪线程在等待分配CPU资源所排队列的长度 | >处理器个数+1 | 多处理器的计算机只有一个处理器队列。如果持续一段时间大于(处理器个数+1)个数的值,说明CPU堵塞 |
Processor | % Processor Time(_Total) | 处理器用来执行非闲置线程时间的百分比 | >85% | 与Processor Information\% Processor Time一样。总体看CPU是否很忙。若忙,接着再看sqlservr进程的CPU占用情况,确定是否是SqlServer消耗CPU。(可以打开“系统性能监视器”或“资源监视器”查看每个进程情况) |
Processor | % Privileged Time(_Total) | 在特权模式下进程线程执行代码所花时间的百分比 | >30% | 当调用 Windows 系统服务时,此服务经常在特权(内核)模式运行,以便获取对系统专有数据的访问。应用模式(用户模式)执行的线程无法访问这些数据,可通过执行程序(内核模式)访问硬件资源请求。如果值很高,可能系统服务遇到问题。 |
Processor | % Interrupt Time | 处理器在实例间隔期间接受和服务硬件中断的时间 (CPU花在处理中断上的时间的百分比) | >50%*(% Processor Time) | 如果这个值超过50%的处理器时间, 你就很可能遇到了一个硬件问题。 |
Processor | Interrupts/sec | 每秒钟处理器接收和处理硬件中断的个数。系统时钟通常每 10 毫秒中断处理器一次。 | >1000(long) | 生成中断的设备(如系统时钟、鼠标、磁盘驱动器、数据通讯线、网络接口卡和其他外缘设备)的活动。这些设备通常在完成任务或需要注意时中断处理器。正常线程执行因此被中断。把这个值跟System: Systems Calls/sec 进行比较, 如果Interrupts/sec 在一段时间内远远超过System: System Calls/sec, 你很可能遇到了一个硬件问题. |
Process | % Processor Time(sqlservr) | sqlservr进程线程使用处理器执行指令所花的时间百分比 | >80% | 指定单个进程消耗的CPU时间占比.参考总的CPU消耗(% Processor Time(_Total)) |
Process | % Privileged Time | 在特权模式下处理线程执行代码所花时间的百分比 | >30%(%Processor Time(sqlservr)) | 当调用 Windows 系统服务时,此服务经常在特权(内核)模式运行,以便获取对系统专有数据的访问。用户模式(应用模式,如 SqlServer)执行的线程无法访问这些数据,可通过执行程序(特权模式)访问硬件资源请求。如果值很高,可能系统服务遇到问题。 |
System | Systems Calls/sec | 运行在计算机上的所有处理器调用操作系统服务例行程序的综合速率。 |
| 这些例行程序执行所有在计算机上的如安排和同步活动等基本的程序,并提供对非图形设备、内存管理和名称空间管理的访问。这个计数器显示用上两个实例中观察到的值之间的差除于实例间隔的持续时间所得的值。 |
计数器 | 对象 | 说明 | 阈值 | 相关说明 |
Physical Disk | % Disk Time | 磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比 | >50% | 如果比较高,再确定是读还是写时间高? |
Physical Disk | Avg. Disk Queue Length | 读取和写入请求的平均数,即正在等待读写的请求数。 | >2 | 如果比较高,再确定是读还是写等待长? |
Physical Disk | Split IO/Sec | 磁盘上的 I/O 分割成多个 I/O 的速率 | >2 | 一个分割的 I/O 可能是由于请求的数据太大不能放进一个单一的 I/O 中或者磁盘碎片化而引起的。 |
Physical Disk | Current Disk Queue Length | 磁盘上当前的请求数量 | >2(long) | 除于磁盘数等于平均磁盘请求数。查看该值是否长时间大于2. |
Physical Disk | Avg. Disk Bytes/Transfer | 写入或读取操作时从磁盘上传送或传出字节的平均数(越高越好) | low | 如果比较低,再确定是读还是写字节低? |
Physical Disk | Avg. Disk sec/Transfer | 以秒计算的一般磁盘传送所需时间(越低越好) | >20ms | 如果比较高,再确定是读还是写时间高? |
Physical Disk | Disk Bytes/sec | 写入或读取操作时从磁盘上传送或传出的字节速率(越高越好) | low | 如果比较低,再确定是读还是写速率低? |
Physical Disk | Disk Transfers/sec | 在磁盘上读取/写入操作速率(越高越好) | low | 如果比较低,再确定是读还是写速率低? |
性能监视器 | windows自带监视器统计 | ||||
Memory | Pool Paged Bytes |
| 任务管理器 | 核心内存(MB) | 未分页 |
Memory | Pool Nonpaged Bytes |
| 任务管理器 | 核心内存(MB) | 分页数 |
Memory | Available Mbytes |
| 任务管理器 | 物理内存(MB) | 可用 |
Memory | Free & Zero Page List Bytes |
| 任务管理器 | 物理内存(MB) | 空闲 |
Memory | Committed Bytes |
| 任务管理器 | 系统 | 提交(MB) |
Memory | Commit Limit |
| 任务管理器 | 系统 | 提交限制(MB) |
Process | Handle Count | _Total | 任务管理器 | 系统 | 句柄数 |
Process | Thread Count | _Total | 任务管理器 | 系统 | 线程数 |
System | Thread |
| 任务管理器 | 系统 | 线程数 |
System | Processes |
| 任务管理器 | 系统 | 进程数 |
|
|
|
|
|
|
|
|
|
|
|
|
Process | Private Bytes | sqlserver | 资源监控器 | 内存\进程 | 提交(KB) |
Process | Working Set | sqlserver | 资源监控器 | 内存\进程 | 工作集(KB) |
Process | Working Set - Private | sqlserver | 资源监控器 | 内存\进程 | 专用(KB) |
Process | (Working Set)减去 | sqlserver | 资源监控器 | 内存\进程 | 可共享(KB)=(工作集-专用) |
|
|
|
|
|
|
Process | Thread Count | sqlserver | 资源监控器 | CPU\进程 | 线程数 |
Process | % Processor Time | sqlserver | 资源监控器 | CPU\进程 | 平均CPU |