除了系统保留的一些计数器外使用sql语句也可以查询大部分性能计数器:

select * from sysperfinfo

 

计数器说明

 

LogicalDisk:

% Disk Time是所选磁盘驱动器用于服务读或写请求的总共时间的百分比。一般推荐是如果该值大于50%,则表现为I/O瓶颈。

Avg. Disk Sec/Read 平均磁盘读一次的时间, 少于10ms为非常好的性能, 10-20为一般, 20-50为差, 需要注意, 大于50为严重的I/O性能问题.

Avg. Disk Sec/Write 平均磁盘写一次的时间, 标准同上.

Avg. Disk Reads/Sec 表现磁盘上读操作的速度。需要确认该值不小于85%的磁盘理论值。

Avg. Disk Writes/Sec表现磁盘上写操作的速度。需要确认该值不小于85%的磁盘理论值。

PhysicalDisk:

Avg. Disk Queue Length指的是“当前磁盘队列长度”,就是:数器反映磁盘完成请求所用的时间。较高的值表明磁盘控制器由于失败而不断重试该磁盘。这些故障会增加平均磁盘传送时间。

Memory:

Cache Bytes 这个计数器是Memory\\System Cache Resident Bytes, Memory\\System Driver Resident Bytes, Memory\\System Code Resident Bytes, 以及 Memory\\Pool Paged Resident Bytes 的总和. 这个计数器仅仅是显示最后一次手机到的结果, 并不是平均值.默认情况下为物理内存的50%, 会随着可用内存的减少而减少, 如果该计数器持续下降表明性能下降.

Page Reads/sec 持续大于5表示在内存读取请求时有大量页面错误, 表示进程的Working Set相对于物理内存太大,已经分页到磁盘, 大于20以上就有严重的内存压力。它显示的是读操作的数量,不包含每个读操作的页面数。高数值表明存在内存瓶颈。如果较低的页面读取操作和很高的Physical Disk/% Disk Time 以及 Physical Disk/Avg. Disk Queue Length同时发生,那么应该存在磁盘瓶颈。如果持续增加的队列长度并没有伴随着降低的页面读取率,那么内存可能不够。是Memory\Pages Input/secMemory\Pages Output/sec的总和.

Free System Page Table Entries 这个计数器显示当前系统中没有使用的page table条目, 如果持续低于3000说明面临着没存压力, 32位系统没有开启/3GB或者/PAE时该计数器一般为8000-140000, 开启/3GB150000左右.

Pages/sec持续大于5表示存在瓶颈。计数器表示页面读取或者写入值磁盘以解决硬页面错误的比率。这个值乘以Physical Disk/Avg. Disk sec/Transfer Memory/Pages/sec,如果结果超过0.1,分页时间超过磁盘访问时间的10%,表示需要更多内存。

Available Bytes少于20%25%则表示内存不足。表示在计算机中可供进程使用的物理内存数量,注意这个计数器是最近计算的结果而并非平均值。

Pool Nonpaged Bytes从系统启动开始监控Memory/Pool Nonpaged Bytes是否有10%以上的增长。如果相比系统启动时的值增加了10%以上,那么可能有很严重的内存泄漏。

Cache Faults/sec表示操作系统在文件系统缓存中查找数据失败的次数,这个值应该尽可能低。缓存与数据位置无关但是确严重依赖于分页文件中数据的密集程度。大量的缓存错误表示内存不足或者也意味着磁盘数据过于分散。

Server

Pool Nonpaged Failures非零正值表示存在瓶颈, 表示从未分页池中分配内存时出错的次数,以及计算机的物理内存太少。未分页池包含进程中还没有交换至磁盘分页文件的虚拟地址空间,比如进程的核心对象表。未分页池的可用程度决定还能创建多少进程,线程以及其他对象。当从未分页池分配出错时,有可能是进程内存泄漏引起,尤其是处理器使用率没有相应增加时。

Pool Paged Failures表示从分页池中分配内存是出错的次数,意味着内存不够或者分页文件过小, 这个计数器应该足够小.

Pool Nonpaged Peak指服务器在未分页池中使用过的最大字节数。表示计算机应该有多大的物理内存。因为未分页池必须是长存的,而且必须有剩余内存为一些其他操作预留,你或许可以把这个值乘以4得出这个系统实际应该有的物理内存。

Cache

MDL Read Hits % 值越高意味着文件系统缓存性能越好,这个值应该尽可能接近100%。这个计数器提供存储器描述符表格(MDL)从文件系统缓存中读取数据的百分比,如果在缓存中就可以直接返回对象而不用从硬盘中读取。

Paging File

% Usage 这个计数器表明当前挂载在系统上的页面文件的负载使用情况, 这个值应该低于70%. 超过70%表示面临着内存压力.32位的SQLAWE为服务帐号授权Lock pages in memory policy后会强制SQL所使用的内存不去分页.

Process:

Private Bytes指这个处理不能与其他处理共享的、已分配的当前字节数。该计数器记录了当前通过VirtualAlloc API CommitMemory数量。无论是直接调用API申请的内存,还是被Heap Manager申请的内存,或者是CLR managed heap,都算在里面。跟Handle Count一样,如果在整个程序周期内总体趋势是连续向上,说明有Memory Leak

Working Set操作系统为进程已提交的内存的总量,这个值和程序申请的内存总量存在密切的关系,如果程序存在内存的泄漏这个值会持续增加. 这个计数器指这个处理的 Working Set 中的当前字节数。 Working Set 是在进程中被线程最近触到的那个内存页集。如果 计算机上的可用内存处于阈值以上,即使页不在使用中,也会留在一 个处理的 Working Set中。当可用内存降到阈值以下,将从 Working Set 中删除页。如果需要页时,它会在离开主内存前软故障返回    Working Set 中。

Virtual Bytes 指进程使用的虚拟地址空间, 以字节数显示的当前大小。 使用虚拟地址空间不一定是指对磁盘或主内存页的相应的使用。虚 拟空间是有限,如果使用过多,可能会限制处理加载数据 库的能力。该计数器记录了当前进程申请成功的用户态总内存地址,包括DLL/EXE占用的地址和通过VirtualAlloc API ReserveMemory Space数量,所以该计数器应该总大于Private Bytes。一般来说,Virtual BytesPrivate Bytes的变化大致一致。由于内存分片的存在, Virtual BytesPrivate Byes一般保持一个相对稳定的比例关系。当Virtual BytesPrivate Bytes的比例关系大于2的时候,程序往往有比较严重的内存地址分片。

Processor

% Processor Time 超过80%会有性能下降, 一般最少要保持在70%以下. 这个计数器是进程所使用的CPU时间.

% Privileged Time 平均值不要超过10%, 这个计数器是在特权模式下执行代码所消耗的CPU时间.

SQLServer: Buffer Management

SQL Server Cache Hit Ratios 指在buffer中并没有在磁盘中读的页比例, 如果低于90%说明有严重的性能问题, 一般都会在96%以上.

Checkpoint Pages/sec由要求刷新所有脏页的检查点或其他操作每秒刷新到磁盘的页数。这个数值过高会影响整体性能. 通常情况下会非常接近于0.

Database Pages 数据库内容在buffer中的页面总数.

Free pages所有可用列表的总页数。

Lazy writes/sec每秒被缓冲区管理器的惰性编写器写入的缓冲区数。惰性编写器是一个系统进程,用于成批刷新脏的老化的缓冲区(包含更改的缓冲区,必须将这些更改写回磁盘,才能将缓冲区重用于其他页),并使它们可用于用户进程。惰性编写器不需要为创建可用缓冲区而频繁执行检查点。这个数值高也会影响性能.通常情况下应该经常为0.

Page life expectancy不被引用的页在缓存池停留的秒数。如果低于300则性能有问题, 这个值也应该是一个很稳定的值.

 

Page reads/sec每秒发出的物理数据库页读取数。此统计信息显示的是所有数据库间的物理页读取总数。由于物理 I/O 的开销大,可以通过使用更大的数据缓存、智能索引、更有效的查询或更改数据库设计等方法,将开销降到最低。这个计数器对于分析数据库是否处于高峰工作时段很有用. 一般来说这个值应该尽量接近于0.

Page writes/sec每秒执行的物理数据库页写入数。

Stolen pages用于其他服务器用途(包括过程缓存)的页数。如果这个值过大说明系统中有其他程序在抢占资源.

Reserved Pages缓冲池保留的页数。一般来说应当max server memory大于Reserved PagesStolen pages的总和, 以免出现内存不足的情况.

Target Pages缓冲池中理想的总页数。

Total Pages缓冲池中当前的的页数(包括数据库页、可用页和被盗页)。如果Total Pages大于Target Pages说明已经面临压力. Total Pages=Stolen pages+Reserved Pages+ Database Pages

SQLServer: Memory Management

Memory Grants Pending等待工作空间内存授权的进程总数。这个数应该总是保持在0, 如果有很频繁的波动说明已经存在内存压力.

SQL Cache Memory (KB) 服务器正在用于动态 SQL 高速缓存的动态内存总数。这个值应该会稳定在一个比较适中的值上, 如果持续下降说明性能有问题.

Target Server Memory (KB) 服务器能够使用的动态内存总量。

Total Server Memory (KB) 从缓冲池提交的内存 (KB)。这个值如果大于Target Server Memory (KB)说明有内存压力.

SQLServer: SQL Statistics

SQL Compilations/sec指每秒编译数。理想状态下该计数器的值应该低,如果batch requests/sec计数器的值非常接近该计数器,那么可能存在大量的SQL调用.

SQL Re-Compilations/sec 指每秒的重新编译数。该计数器的值越低越好。存储过程在理想情况下应该只编译一次,然后被他们的执行计划重复利用。如果该计数器的值较高,或许需要换个方式编写存储过程,从而减少重编译的次数.