收集操作系统服务器的服务器性能信息,包括Processor、磁盘、网络、内存
Processor处理器
PhysicalDisk物理磁盘(某个RAID)
2.1Avg.DiskQueueLength等待请求的队列长度,若此值过大,说明磁盘存在瓶颈,自然磁盘延迟的值也会过大。
LogicalDisk逻辑磁盘(某个卷)
3.1%FreeSpace某个磁盘的空闲百分比;FreeMegabytes磁盘剩余大小MB
3.2DiskReadBytes/sec;DiskTransfers/sec;DiskWriteBytes/sec这三个计数器表示每秒磁盘的读写情况,表示磁盘的IO性能(iops)
Memory内存
4.1AvailableMbytes可以内存大小MB,此内存能立刻分配给一个进程或系统使用。它等于分配给待机(缓存的)、空闲和零分页列表内存的总和。
4.2CacheBytes系统使用的内存
4.3CommitLimit可以申请的内存总大小(虚拟内存和物理内存);CommittedBytes已经使用的内存大小(虚拟内存和物理内存);均是以Byte(字节)为单位。
4.4FreeSystemPageTableEntries指系统当前未使用的页表项数目。表示内存是否空闲。
4.5PageFaults/sec每秒出错页面的数量,也就是未在内存中命中的页面数。因此伴随着Pages/sec计数器是由于出错页面从磁盘读取数据页的速度。此值越大说明内存可能存在一定瓶颈,或者存在大量数据存取。
NetworkInterface网络接口
5.1CurrentBandwidth指以位/每秒估计的网络接口的当前带宽。对于那些带宽不变的或无法估计出准确数据的界面,这个值为名义带宽。
5.2BytesReceived/sec;BytesSent/sec;BytesTotal/sec每秒种发送和接收的字节数,表示当前网络的使用情况。
5.3OutputQueueLength输出数据包队列,此值大于2说明传输存在延迟。
5.4PacketsOutboundDiscarded被选为丢弃的数据包数目,丢弃的原因可能是释放缓冲空间。PacketsOutboundErrors由于错误不能传输的数据包数目
5.5PacketsReceivedDiscarded被选为丢弃的数据包数目,丢弃的原因可能是释放缓冲空间。PacketsReceivedErrors由于错误不能传输的数据包数目
SQLServer中的AccessMethods对象提供监视访问数据库中的逻辑数据的计数器;BufferManager计数器监视对磁盘上的数据库也的物理访问。
AccessMethods存取方式
AccessMethods监视用于访问数据库中存储的数据的方法有助于确定是否可以通过添加或修改索引、添加或移动分区、添加文件或文件组、对索引进行碎片整理或者重写查询来提高查询性能。AccessMethods计数器也可用于监视数据库中数据、索引和可用空间的数量,从而指示每个服务器实例的数据卷和碎片。索引的碎片过多会降低性能。
1.1PageSplits/sec每秒由于索引页溢出而发生的页拆分数。此数据越大表示某表的修改频率较高,且要确认该索引是否适合建立该字段上。
1.2WorkfilesCreated/sec每秒创建的工作文件数
1.3WorktablesCreated/sec每秒创建的工作表数
BufferManager缓存管理
监视用于存储数据页的内存;读取和写入数据库页时的物理io等,通过此对象可以判断是否存在物理内存瓶颈可以了解服务器的查询性能等等。
2.1Buffercachehitratio命中高速缓冲区页的百分比。若此值过低说明可能内存存在一定瓶颈
2.2Databasepages缓冲池中数据库内容的页数
2.4Checkpointpages/secCheckpoint的执行频率,若执行的频率过高。则说明服务器过于频繁的修改数据。
2.5Lazywrites/sec若懒写入过于频繁,说明没有空闲的缓冲区供使用,内存可能存在一定瓶颈。“惰性编写器”是一个系统进程,用于成批刷新脏的过期的缓冲区(包含更改的缓冲区,必须将这些更改写回磁盘,才能将缓冲区重用于其他页),并使它们可用于用户进程。
MemoryManager内存管理
监视总体的服务器内存使用情况,以估计用户活动和资源使用,有助于查明性能瓶颈。
3.2TargetServerMemory(KB);TotalServerMemory(KB)理想上能使用内存量与内存管理器提交的内存量。若此两值存在差异则说明内存异常。
GeneralStatistics常规统计
4.1UserConnections;Logins/sec;Logouts/sec用户并发情况
4.2Processesblocked当前阻塞数量
4.3TempTablesForDestruction等待被清除系统线程破坏的临时表/表变量数。无用的临时表和表变量。
SQLStatistics;WaitStatistics请求与等待统计
5.1BatchRequests/sec;SQLCompilations/sec;SQLRe-Compilations/sec每秒的请求、编译和重编译的次数,这些对于优化供参考。
5.2Lockwaits等待锁的进程数。
5.3Logwritewaits等待写入日志缓存的进程数
Databases针对数据库级别
6.1LogFlushWaitTime;LogFlushes/sec日志刷新等待和频率,若数据异常则可能存在磁盘瓶颈
6.2Transactions/sec事务数
Locks锁
7.1LockRequests/sec;LockTimeouts/sec锁请求频率;锁超时频率
7.2NumberofDeadlocks/sec死锁情况。
PS:
性能计数器(counter)是描述服务器或操作系统性能的一些数据指标。计数器在性能测试中发挥着“监控和分析”的关键作用,尤其是在分析系统的可扩展性、进行性能瓶颈的定位时,对计数器的取值的分析非常关键。但必须说明的是,单一的性能计数器只能体现系统性能的某一个方面,对性能测试结果的分析必须基于多个不同的计数器。
性能测试之内存篇(windows)
要监视内存不足的状况,请从以下的对象计数器开始:
·Memory\AvailableBytes
·Memory\Pages/sec
AvailableBytes剩余的可用物理内存,单位是兆字节(参考值:>=10%)。表明进程当前可使用的内存字节数。Pages/sec表明由于硬件页面错误而从磁盘取出的页面数,或由于页面错误而写入磁盘以释放工作集空间的页面数。
如果AvailableBytes的值很小(4MB或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存。如果Pages/sec的值为20或更大,那么您应该进一步研究页交换活动。Pages/sec的值很大不一定表明内存有问题,而可能是运行使用内存映射文件的程序所致。
操作系统经常会利用磁盘交换的方式提高系统可用的内存量或是提高内存的使用效率。下列四个
指标直接反映了操作系统进行磁盘交换的频度。PageFaults/sec
当处理器在内存中读取某一页出现错误时,就会产生缺页中断,也就是pageFault。如果这个页
位于内存的其他位置,这种错误称为软错误,用TransitionFault/sec来衡量;如果这个页位于硬盘上,必须从硬盘重新读取,这个错误成为硬错误。硬错误会使系统的运行效率很快将下来。PageFaults/sec这个计数器就表示每秒钟处理的错误页数,包括硬错误和软错误。PageInput/sec表示为了解决硬错误而写入硬盘的页数(参考值:>=PageReads/sec)PageReads/sec表示为了解决硬错误而从硬盘上读取的页数。(参考值:<=5)Pages/sec表示为了解决硬错误而从硬盘上读取或写入硬盘的页数(参考值:00~20)
必须同时监视AvailableBytes、Pages/sec和PagingFile%Usage,以便确定是否发生这种情况。如果正在读取非缓存内存映射文件,还应该查看缓存活动是否正常。
CatheBytes文件系统的缓存(默认为50%的可用物理内存)
内存泄露
·Memory\CommittedBytes
如果您怀疑有内存泄露,请监视Memory\AvailableBytes和Memory\CommittedBytes,以观察内存行为,并监视你认为可能在泄露内存的进程的Process\PrivateBytes、Process\WorkingSet和Process\HandleCount。如果您怀疑是内核模式进程导致了泄露,则还应该监视Memory\PoolNonpagedBytes、Memory\PoolNonpagedAllocs和Process(process_name)\PoolNonpagedBytes。
privateBytes进程无法与其他进程共享的字节数量。该计数器的值较大时,有可能是内存泄露的信号
检查过于频繁的页交换
由于过多的页交换要使用大量的硬盘空间,因此有可能将导致将页交换内存不足,这容易与导致页交换的磁盘瓶颈混淆。因此,在研究内存不足不太明显的页交换的原因时,您必须跟踪如下的磁盘使用情况计数器和内存计数器:
·PhysicalDisk\%DiskTime
·PhysicalDisk\Avg.DiskQueueLength
例如,包括PageReads/sec和%DiskTime及Avg.DiskQueueLength。如果页面读取操作速率很低,同时%DiskTime和Avg.DiskQueueLength的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。
研究程序的活动
接下来,检查正在运行的程序导致的过多的页交换。如果可能,请停止具有最高工作集值的程序,然后查看页交换速率是否有显著变化。如果您怀疑存在过多的页交换,请检查Memory\Pages/sec计数器。该计数器显示由于页面不在物理内存中而需要从磁盘读取的页面数。(注意该计数器与PageFaults/sec的区别,后者只表明数据不能在内存的指定工作集中立即使用。)
性能测试之处理器篇(windows)
监视“处理器”和“系统”对象计数器可以提供关于处理器使用的有价值的信息,帮助您决定是否存在瓶颈。需要包含下列内容:
该计数值用于体现服务器整体的处理器利用率,对多处理器的系统而言,该计数值体现的是所有CPU的平均利用率。如果该值的数值持续超过90%,则说明整个系统面临着处理器方面的瓶颈,需要通过增加处理器来提高性能。
要注意的是,由于操作系统本身的特性,在某些多CPU系统中,该数据本身并不大,但此时CPU之间的负载状况极不均衡,此时也应该视作系统产生了处理器方面的瓶颈。
观察处理器使用情况的值
考察处理器瓶颈
进程的线程所需要的处理器周期超出可用周期时,处理器瓶颈将逐步显示出来。可以建立较长的处理器队列,并且系统响应会受到影响。处理器瓶颈两种常见的原因是CPU限制程序和产生过多中断的驱动程序或子系统组件。
要决定中断活动是否造成瓶颈,请观察Processor\Interrupts/sec计数器的值,该计数器测量来自输入/输出(I/O)设备的服务请求的速度。如果此计数器的值明显增加,而系统活动没有相应增加,则表明存在硬件问题。
注意
要检测可能影响处理器性能的硬件问题,例如IRQ冲突,请观察System\FileControlBytes/second的值。
监视多处理器系统
要观察多处理器计算机的效率,请使用下列附加计数器。
计数器
说明
Process\%ProcessorTime
Processor(_Total)\%ProcessorTime
Thread\%ProcessorTime
性能测试之磁盘篇(windows)
监测对象:PhysicalDisk如果分析的计数器指标来自于数据库服务器、文件服务器或是流媒体服务器,磁盘I/O对这些系统来说更容易成为瓶颈。
每磁盘的I/O数可用来与磁盘的I/O能力进行对比,如果经过计算得到的每磁盘I/O数超过了磁盘标称的I/O能力,则说明确实存在磁盘的性能瓶颈。
下表给出了每磁盘I/O的计算公式:
RAID类型
计算方法
RAID0
(Reads+Writes)/NumberofDisks
RAID1
(Reads+2*Writes)/2
RAID5
[Reads+(4*Writes)]/NumberofDisks
RAID10
[Reads+(2*Writes)]/NumberofDisks
AverageDiskBytes/Transfer
性能测试之网络篇(windows)
监测对象:NetworkInterface网络分析是一件技术含量很高的工作,在一般的组织中都有专门的网络管理人员进行网络分析,对测试工程师来说,如果怀疑网络是系统的瓶颈,可以要求网络仍有来写真进行网络方面的检测。
NetworkInterface\BytesTotal/sec为发送和接收字节的速率(包括帧字符在内)。可以通过该计数器的值判断网络连接速度是否是瓶颈,具体操作方法是用该计数器的值与目前的网络带宽进行比较。
ByteTotal/sec表示网络中接受和发送字节的速度,可以用该计数器来判断网络是否存在瓶颈(参考值:该计数器和网络带宽相除,<50%)
性能测试之进程篇(windows)
查看进程的%ProcessorTime值
查看每个进程产生的页面失效
可以用每个进程产生的页面失效(通过Process\PageFailures/sec计数器获得)和系统的页面失效(可通过Memory\PageFailures/sec计数器获得)的比值,来判断哪个进程产生了最多的失效页面,这个进程要么是需要大量内存的进程,要么是非常活跃的进程,可以对其进行中的分析。
了解进程的Process\PrivateBytes
Process\PrivateBytes是指进程所分配的无法与其他进程共享的当前字节数量。该计数器主要用拉判断进程在性能测试过程中有无内存泄漏。
(备注:进程分析方法用到的计数器主要有:Process\%ProcessorTime、PageFailures/sec、PageFailures/sec、PrivateBytes)
①内存映射文件机制
比如使用memcpy等内存操作的函数。这种方法能够很好的应用在需要频繁处理一个文件或者是一个大文件的场合,这种方式处理IO效率比普通IO效率要高。
利用内存映射文件您可以认为操作系统已经为您把文件全部装入了内存,然后您只要移动文件指针进行读写即可了。这样您甚至不需要调用那些分配、释放内存块和文件输入/输出的API函数,另外您可以把这用作不同的进程之间共享数据的一种办法。运用内存映射文件实际上没有涉及实际的文件操作,它更象为每个进程保留一个看得见的内存空间。至于把内存映射文件当成进程间共享数据的办法来用,则要加倍小心,因为您不得不处理数据的同步问题,否则您的应用程序也许很可能得到过时或错误的数据甚至崩溃。
内存映射文件本身还是有一些局限性的,譬如一旦您生成了一个内存映射文件,那么您在那个会话期间是不能够改变它的大小的。所以内存映射文件对于只读文件和不会影响其大小的文件操作是非常有用的。当然这并不意味着对于会引起改变其大小的文件操作就一定不能用内存影射文件的方法,您可以事先估计操作后的文件的可能大小,然后生成这么大小一块的内存映射文件,然后文件的长度就可以增长到这么一个大小。我们的解释够多的了,接下来我们就看看实现的细节:
3,硬盘性能计数器
在OSLevel上,Windows在一块物理硬盘上分成多个逻辑分区,每一个逻辑分区叫做一个LogicalDisk,通过盘符标识,运行在Windows上的Application使用盘符来寻址。对于分配在同一块物理硬盘上的逻辑分区,共享物理硬盘的读写带宽,相当于在一块物理硬盘上工作。因此,Disk计数器分为两组:PhysicalDisk和LogicalDisk,LogcialDisk计数器记录每个逻辑分区的读写计数,用于分析特定的Application在不同的逻辑分区上的DiskIO活动和性能参数;PhysicalDisk计数器记录整个物理Disk的性能指标,用于了解Disk的响应速度,主要使用PhysicalDisk计数器,分析Disk的性能问题。
系统级经常用到的Disk性能计数器是PhysicalDisk计数器,LogcialDisk仅供参考:
avg.Disksec/(Transfer,Read,Write),能够很好的反映Disk的IO速度,所以这三个计数值经常用来衡量Disk的IO速度:
二,系统物理内存性能计数器
SQLServer在运行的过程中,会持续地向内存中加载大量数据,如果数据长期驻留在内存中,那么SQLServer不需要申请DiskIO请求,就能直接访问数据,快速响应用户的请求。如果SQLServer访问的数据不在内存中,将会产生一个HardPageFault,那么SQLServer首先指示存储引擎将数据页从Disk加载到内存中,产生PageIOLatch等待,等到数据被加载到内存之后,SQLServer在内存中访问数据,处理用户请求,由于Disk的IO速度较慢,延迟高,大量的HardPageFault将严重影响SQLServer响应用户请求的速度,因此,常用的系统级内存计数器跟缺页中断有关:
三,SQLServer的BufferManager计数器
BufferManager计数器用于监视SQLServer如何使用内存数据页和计划缓存,读取和写入数据页时的DiskIO。由于BufferPool是SQLServer内存最活跃,使用最多的部分,所以也是最容易出现性能瓶颈的部分,计数值尤其重要:
四,SQLServer的MemoryManager计数器
MemoryManager计数器用于监控服务器内存总体使用情况,在一个非常繁忙的系统中,Lock内存和授予内存是常用的计数器:
五,使用PerformanceCounter监控SQLServer数据库系统的整体性能
创建两个DataSet:DiskActivity,用于监控物理磁盘的活动;MemoryActivity,用于监控系统内存的HardFault和SQLServer的内存使用。