监控范围
计数器
说明
CPU
Processor(_Total)% Processor Time
与 Processor Information% Processor?Time一样。总体看CPU是否很忙。
若忙,接着再看sqlservr进程的CPU占用情况,确定是否是SqlServer消耗CPU。
Processor(_Total)% Interrupt Time
处理器在实例间隔期间接受和服务硬件中断的时间 (CPU花在处理中断上的时间的百分比)。
如果这个值超过50%的处理器时间,你就很可能遇到了一个硬件问题。
SystemProcessor Queue Length
就绪线程在等待分配CPU资源所排队列的长度。多处理器的计算机只有一个处理器队列。
如果持续一段时间大于(处理器个数+1)个数的值,说明CPU堵塞
SystemThreads
当前计算机线程数。
SystemContext Switches/sec
线程在处理器中的切换速率。可了解到系统的繁忙程度,较难确定什么。
如果 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
MemoryAvailable Mbytes
服务器可用内存。
MemoryPages/sec
为解决硬页错误从磁盘读取或写入磁盘的速度(每秒钟内存和磁盘之间交换的页面数)。
该数据很高时,再与Buffer Hit Cache Ratio判断是数据库还是其它程序引起的。
MemoryTransition Faults/sec
为解决软页错误从内存其它地方读取的速度。在内存操作,影响不大。
SQLServer:Buffer ManagerDatabase pages
缓冲池(buffer pool)中数据库使用的页面数
SQLServer:Buffer ManagerStolen pages
缓冲池(buffer pool)中用于其他服务(如过程缓存)的页数
SQLServer:Buffer ManagerFree pages
缓冲池(buffer pool)中为使用的页面数。
可确定内存是否充足以调优命中率 Buffer Hit Cache Ratio
SQLServer:Buffer ManagerTarget pages
该实例数据库可使用缓冲池(buffer pool)的最大页面数。
sp_configure 'max server memory (MB)'
SQLServer:Buffer ManagerTotal pages
该实例数据库已使用缓冲池的页面数,最大为 Target pages 。
Total pages = Database pages + Free pages + Stolen pages
SQLServer:Memory ManagerMemory Grants Pending
等待内存授予的进程数。应接近为0,内存充足不需要等待分配内存空间。
SQLServer:Memory ManagerLock Memory (KB)
维护锁开销的动态内存。内存不足影响锁的申请,锁太多也消耗过多内存。
SQLServer:Memory ManagerConnection Memory (KB)
维护连接占用的动态内存。内存不足影响连接,连接过多也消耗过多内存。
SQLServer:Buffer ManagerBuffer cache hit ratio
缓存命中率,在缓冲区高速缓存中找到而不需要从磁盘中读取(物理I/O)的页的百分比。
可判断内存是否充足,最好保证95%以上。
(实际也不太准,预读也当做命中了,预读是读磁盘的)
SQLServer:Buffer ManagerCheckpoint pages/sec
每秒钟将内存脏数据刷新到磁盘的次数。
与内存无关,DML频繁时改值会变大,主要影响IO写入。
SQLServer:Buffer ManagerLazy writes/sec
每秒钟由惰性写入器将内存脏数据写入到磁盘的此时。
与内存相关,内存不足时会发生,同时将脏数据页释放使内存增加。
SQLServer:Buffer ManagerPage life expectancy
页的生命期,数据页在内存中的驻留时间。内存足够时,页面驻留更久而不被释放。
Paging File(??C:pagefile.sys)% Usage
页面文件(pagefile.sys)的使用比例,可查看文件确定用了多大的虚拟内存。
虚拟内存=物理内存+页面文件,物理内存不足时会扩展使用到页面文件。
Paging File(??C:pagefile.sys)% Usage Peak
页面文件(pagefile.sys)的峰值比例,即可确定使用的最大值。
IO
(C盘为例)
LogicalDisk(C:)Free Megabytes
磁盘可用空间
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 StatisticsBatch Requests/sec
每秒批处理请求数
SQLServer:SQL StatisticsSQL Compilations/sec
每秒SQL编译次数。
相当于首次创建或执行语句导致编译,编译和重编译都消耗 CPU 和内存资源。
编译消耗CPU,编译完成后计划驻留在内存。
SQLServer:SQL StatisticsSQL Re-Compilations/sec
每秒SQL重编译次数。有不能重用的执行计划,加参数使重用,或强制参数化。
SQLServer:General StatisticsProcesses blocked
当前堵塞的进程数。Sys.sysprocess 可查看,可使用策略触发保存堵塞记录。
SQLServer:General StatisticsUser Connections
当前连接数。select COUNT(*) from sys.sysprocesses where spid>50
SQLServer:General StatisticsActive Temp Tables
当前正在使用的临时表或者表变量。
SQLServer:Access MethodsFull Scans/sec
每秒表或索引的扫描次数。可以搜索缓存中扫描语句。(搜索语句较特殊)
SQLServer:Access MethodsWorkfiles Created/sec
每秒 Workfiles 创建数量,表哈希连接或者哈希聚合需要用到。
SQLServer:Access MethodsWorktables Created/sec
每秒 Worktables 创建数量,查询、LOB和XML变量、游标需要用到。
SQLServer:Access MethodsPage 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
数据库每秒事务数