澳门新萄京:Server的内存压力,品质计数器
分类:数据库

性能计数器(Performance Counter)是量化系统状态或活动的一个数值,Windows Performance Monitor在一定时间间隔内(默认的取样间隔是15s)获取Performance Counter的当前值,并记录在Data Collections中,通过Performance Monitor能够查看系统的性能数据,是故障排除的极佳工具。Performance Counter数量很多,如果不了解计数器的功能,在选择计数器时,往往不知所措。由于SQL Server 是IO密集型的应用程序,经常需要进行大量的读写操作,从Disk读取数据到内存,将内存中的数据写入到Disk,因此,Disk和内存是SQL Server的生命线,监控SQL Server 的性能,经常用到的性能计数器是Disk和内存。

SQL Server 使用的资源受到操作系统的调度,同时,SQL Server在内部实现了一套调度算法,用于管理从操作系统获取的资源,主要是对内存和CPU资源的调度。一个好的数据库系统,必定在内存中缓存足够多的信息,以减少从物理硬盘中读取数据的次数;如果内存是系统瓶颈,那么SQL Server一定会运行的非常慢。监控SQL Server的内存压力,需要从Widnows级别上,对内存使用的整体使用情况进行监控:从SQL Server级别上,监控SQL Server对内存资源的使用情况。

随着越来越多的用户将生产应用迁移到云平台,一些传统 IT 的运维功能也相应的需要改变,例如监控,备份等等。我们希望通过这一系列的文章来协助用户更好的理解在 Azure 云平台上实现资源监控的方法。

一,Disk性能监控

一,从Windows级别来监控内存资源的使用

在今后的系列文章中,我们会详细介绍详细的 Azure 平台的一些监控服务。由于很多用户以虚拟机方式迁移之前本地数据中心的生产环境,我们就从虚拟机的监控作为切入点。今天的内容就从最基本的了解虚拟机的性能指标开始。

1,Disk的结构

操作系统能够调度的内存,有两个来源:物理内存和虚拟内存。物理内存是内存硬件提供的高速访问设备,虚拟内存是物理内存的扩展,操作系统开辟一块物理Disk空间,作为内存空间使用,用于存储缓存数据的文件,叫作缓存文件(Paging File),路径名是C:pagefile.sys,默认是隐藏的。操作系统透明地使用Paging File来存储数据,Application是无法控制和感知数据是存储在物理内存还是在虚拟内存中,即,操作系统决定使用物理内存,或Paging file来存储缓存数据。一般,通过Performance Monitor来监控Windows级别的内存资源使用情况。

我们知道 Azure 的宿主机是基于 Hyper-V 平台,从平台层面,无论运行的是 Windows 还是 Linux 的虚拟机,Hyper-V 平台都可以针对虚拟机这个对象来提供一定的性能指标。具体的技术实现细节可以参考:资源监视介绍。对于磁盘和网络的指标很容易理解。而 CPU 的计算相对复杂,建议可以仔细阅读其中关于 CPU 资源的详细解释。

典型的机械Disk的结构主要有:磁头(head),磁道(track),扇区(sector),盘面(Platter),柱面(cylinder)和簇(cluster)。如图,

1,监控物理内存

计数器说明

澳门新萄京 1

常用的系统级别的内存计数器跟硬缺页中断有关:

Disk Read Bytes上一个采样周期内的磁盘读取数据量

当磁盘旋转时,若磁头保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹叫做磁道。磁盘上的每个磁道被等分为若干个弧段,这些弧段是磁盘的扇区,每个磁道上的扇区数量是相等的,每个扇区存放512个字节的信息,磁盘驱动器在向磁盘读取和写入数据时,以扇区为单位。若干个连续的扇区组合为一个簇,文件存取是以簇为单位的。

  • Memory:Page Faults/sec :每秒发生的Page Fault的数量,Page Fault包括Hard Fault 和 Soft Fault,Hard fault表示需要从Disk中读取数据页,Soft fault表示需要从Physical Memory中读取数据页,Soft Fault不会影响性能,由于Hard Fault需要访问Disk,会产生显著的延迟。
  • Memory:Pages Input/sec:每秒发生的Hard Fault的数量,用于计算Hard Fault的百分比: Pages Input / Page Faults = % Hard Page Faults,如果百分比经常大于40%,说明系统需要经常访问Disk获取数据,在一定程度上说明系统存在内存压力。
  • Memory:Pages/sec:每秒从Disk读取或写入Disk的Page数量,表示内存和Disk交互的Page的数量:将Page存储到Disk或从Disk读取数据到内存的Page的数量。

Disk Read Operations/Sec虚拟机的各个磁盘上每秒读操作次数的总和

硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的"0"向中心开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。所谓硬盘的CHS,是指Cylinder(柱面)、Head(磁头)、Sector(扇区),硬盘的容量=柱面数×磁头数×扇区数×512B。

如下图,Page Faults/sec的数量,均值在6000/s左右,Pages Input/sec波动明显,时高时低,持续的时间很短,均值在50/s左右,两者的比例关系均值低于1%,低于40%,可以认为内存压力较小。Pages/sec 和 Pages Input/sec几乎完全重合,说明,操作系统当时在进行大量的物理读操作。

Disk Write Bytes上一个采样周期内的磁盘写入数据量

澳门新萄京 2

澳门新萄京 3

Disk Write Operations/Sec虚拟机的各个磁盘上每秒写操作次数的总和

扇区是能独立寻址的最小单位,簇是资源分配的最小单位。Disk的一次读写操作,由寻道,旋转延迟和数据传输组成,由于寻道和旋转延迟占用了读写操作的大部分时间,Disk在执行每次读写操作时,采取就近原则,读写连续的N个扇区,读写的数据量是4KB的整数倍。

2,监控虚拟内存

Network In虚拟机所有网卡上的进站数据总量

2,顺序读写和随机读写

操作系统会同时消耗物理内存和虚拟内存,虚拟内存计数器主要有两个:

Network Out虚拟机所有网卡上的出站数据总量

随机读写是指数据分布在不同的磁道上,Disk的磁头必须移动磁道,才能读取到相应的数据;顺序读写是指数据分布在同一磁道的相邻扇区中,在读写数据时,Disk的磁头不需要移动磁道。由于,Disk的磁道移动是机械运动,“很慢”,占读写数据所用时间的绝大部分,因此,Disk的顺序读写速度远远高于随机读写速速,应尽量避免随机读写。Disk,固态硬盘盒内存的读写速度对比:

  • Paging File:% Usage 用于监控Paging file实例的使用比例
  • Process: Paging File Bytes  用于监控虚拟内存的大小

Percentage CPU虚拟机的 CPU 资源的总体运行繁忙程度

澳门新萄京 4

存储在虚拟内存中的数据越多,说明物理内存数量和实际需求量的差距越大,比值 % Usage 仅仅作为参考值,如果长时间接近100%,那么系统很可能出现异常。

除了由平台层面提供的性能指标,虚拟机可以通过内部运行的应用拓展来提供更细节的性能指标。对于 Windows 和 Linux 虚拟机的性能指标,在这里列出的是本人对这些指标的理解,在不同的操作系统上可能有细微的差别。

3,硬盘性能计数器

二,从SQL Server级别上,监控SQL Server对内存资源的使用情况

Windows 虚拟机

在OS Level上,Windows在一块物理硬盘上分成多个逻辑分区,每一个逻辑分区叫做一个Logical Disk,通过盘符标识,运行在Windows上的Application使用盘符来寻址。对于分配在同一块物理硬盘上的逻辑分区,共享物理硬盘的读写带宽,相当于在一块物理硬盘上工作。因此,Disk计数器分为两组:PhysicalDisk 和 LogicalDisk,LogcialDisk计数器记录每个逻辑分区的读写计数,用于分析特定的Application在不同的逻辑分区上的Disk IO活动和性能参数;PhysicalDisk计数器记录整个物理Disk的性能指标,用于了解Disk的响应速度,主要使用PhysicalDisk计数器,分析Disk的性能问题。

1,从Buffer Pool计数器监控服务器内存总体使用情况

内存相关

系统级经常用到的Disk性能计数器是PhysicalDisk计数器,LogcialDisk仅供参考:

由于Buffer Pool是SQL Server内存最活跃,使用最多的部分,所以也是最容易出现性能瓶颈的部分,计数值尤其重要:

计数器说明

  • %Disk Time :表示Disk的忙碌程度,是Disk处理读写请求的时间的百分比,经常大于100%,建议使用%IdleTime反推出Disk处于读写状态的百分比
  • Disk Reads/sec :每秒向Disk请求读操作的次数
  • Disk Transfers/sec:Disk每秒执行读写操作的次数
  • Disk Reads Bytes/sec :在Disk执行读操作时,每秒从Disk读取的字节数量
  • Disk Bytes/sec:当Disk执行读写操作时,每秒从Disk读取到内存的,或从内存写入到Disk的字节数量,好的Disk,其值在20-40MB之间,差的Disk,其值在20MB以下。
  • Avg. Disk Queue Length :提供Disk阻塞程度的主要度量值,表示在 sample interval期间,Disk等待处理的IO请求队列的平均长度,即等待被Disk处理的IO请求的数量,队列的长度要考虑到RAID,如果存储后台使用100块物理disk,那么该计数值达到100,这个值是正常的,理论上,每块物理disk的队列长度不应该长时间大于2.
  • Avg. Disk sec/Transfer:Disk每一次读写操作所用的平均时间
  • Avg. Disk sec/Read:Disk每一次读操作所用的平均时间 
  • Avg. Disk sec/Write:Disk每一次写操作所用的平均时间
  • Lazy Writes/sec:被LazyWriter刷新的buffer数量,如果是脏页,那么将buffer写入到Disk,并将buffer空间标记为Free,如果不是脏页,那么该buffer空间也被标记为Free,LazyWriter的作用是维护一定数量的Free buffer,SQL Server使用Free buffer来加载新的数据页。
  • Page Life Expectancy:PLE,数据页驻留在内存中的时间。如果SQL Server没有新的内存需求,或有空闲的内存来完成新的内存需求,那么Lazy Writer不会被处罚,Page会一直驻留在Buffer Pool中,那么Page Life Expectancy会维持在一个比较高的水平;如果Page Life总是高高低低,表明SQL Server存在内存压力。PLE的参考数值是:Max Server Memory/4GB*300s,如果PLE值长期低于参考值,内存可能存在瓶颈。
  • Page Reads/sec:每秒从Disk读取的数据页数,即物理读的次数,如果用户访问的数据都缓存在内存中,那么SQL Server不需要从物理Disk上读取页面。由于物理IO的开销大,Page Reads操作一定会影响SQL Server的性能。
  • Free list stalls/sec:等待一个Free Page的请求数量,SQL Server申请从Disk加载一个Page到内存中,必须在内存中分配一个Buffer,Buffer Manager负责维护Free Buffer List,如果Free List没有任何Free Buffer,那么请求必须等待,直到有空闲的Buffer使用,才能将Disk中的Page加载到内存中。

Memory% Committed Bytes in Use这两个计数器都是关于 Committed Bytes。在 Windows 系统的内存管理中,内存使用遵循 Reserve 和 Commit 的方式。Committed Byes 可以认为是系统确认使用的内存。而系统可以使用的内存是有限的,其上限为内存

avg.Disk sec/(Transfer,Read,Write),能够很好的反映Disk的IO速度,所以这三个计数值经常用来衡量Disk的IO速度:

根据图表数据分析,SQL Server执行大量的物理读操作,导致PLE大幅降低;从Free List Stall和 Lazy Write的测量值推断,SQL Server内存压力较小:

  • Paging File。当 % Committed Bytes in Use 接近 90%,我们可以认为当前虚拟内存的使用已经接近极限,需要特别留意。
  • 很好:<10ms
  • 一般:10-20ms
  • 有点慢:20-50ms
  • 非常慢:>50ms
  • PLE:大幅度降低,从50Ks降低到均值2Ks左右,说明内存数据页被大量替换;
  • Free List Stalls/sec: 波动明显,总体数值很小,说明系统中的Free Buffer能够满足SQL Server的需求;
  • Lazy Write/sec:均值在4/sec,比较小;
  • Page Reads/sec:均值在4000/sec,说明SQL Server在进行大量的物理读操作

Memory% Committed Bytes

二,系统物理内存性能计数器

 澳门新萄京 5

MemoryAvailable Bytes在系统中现在可以用于直接满足内存申请的内存数量。这个数值包括了内存中的 Standby 内存页列表,Free 内存页列表和全零内存页列表。通常情况,如果此计数器低于内存总数的 10%,需要引起注意。但是对于某些特定的生产压力,如 SQL,Exchange 和 IIS 等,这些应用会从操作系统尽可能多的申请内存来自主管理。因此,仅仅以这一个指标不足以说明是否存在内存不足的问题。通常需要总和考虑 Page/Sec 这个计数器

SQL Server在运行的过程中,会持续地向内存中加载大量数据,如果数据长期驻留在内存中,那么SQL Server 不需要申请Disk IO请求,就能直接访问数据,快速响应用户的请求。如果SQL Server访问的数据不在内存中,将会产生一个Hard Page Fault,那么SQL Server首先指示存储引擎将数据页从Disk加载到内存中,产生PageIOLatch等待,等到数据被加载到内存之后,SQL Server在内存中访问数据,处理用户请求,由于Disk 的IO速度较慢,延迟高,大量的Hard Page Fault将严重影响SQL Server响应用户请求的速度,因此,常用的系统级内存计数器跟缺页中断有关:

BCHR(Buffer cache hit ratio)表示:SQL Server 直接从内存中读取数据的百分比,跟预读有很大的关系。一次命中意味着在SQL Server读取数据时,数据存在于内存中,跟数据驻留在内存中的时间长短,以及内存是否有压力关系不大,仅供参考。

MemoryCache Faults/SecCache Faults 是 Paging Faults 其中的一种,通常由于系统尝试访问一个打开文件的某些段数据时,该段数据不在内存中而产生的。注意 Cache Faults 包含 Hard Fault 和 Soft Fault,只有 Hard Fault 的类型才会真正出发磁盘文件读写。一般这个计数器被用作内存分析的辅助判断。

  • Memory:Page Faults/sec :每秒发生的Page Fault的数量,Page Fault包括Hard Fault 和 Soft Fault,Hard fault表示需要从Disk中读取数据页,Soft fault表示需要从Physical Memory中读取数据页,Soft Fault不会影响性能,由于Hard Fault需要访问Disk,会产生显著的延迟。
  • Memory:Pages Input/sec:每秒发生的Hard Fault的数量,用于计算Hard Fault的百分比: Pages Input / Page Faults = % Hard Page Faults,如果百分比经常大于40%,说明系统需要经常访问Disk获取数据,在一定程度上说明系统存在内存压力。
  • Memory:Pages/sec:每秒从Disk读取或写入Disk的Page数量,表示内存和Disk交互的Page的数量:将Page存储到Disk或从Disk读取数据到内存的Page的数量。

逻辑读是指直接从内存中读取数据,物理读是指从物理Disk文件中加载数据到内存,从SQL Server角度来看,BCHR=逻辑读/(逻辑读 物理读)。

MemoryPage Faults/Sec这几个计数器是被用作是否存在内存不足情况的最主要计数器。其中 Paging Faults/Sec 指的是系统中产生的内存页交换请求。注意这个请求包含 Hard Fault 和 Soft Fault。Soft Fault 指的是该请求可以不通过从磁盘上读写文件就可以满足,而 hard fault 指的是必须经过物理磁盘读写才可以解决。很显然,hard fault 更影响系统的性能。因此,我们用 Page/Sec 来标注所有的 Hard Fault。当 Hard Fault 引起的磁盘 IO 超过系统 IO 总量的 70% 时,并参照可用内存的数量,我们可以判断是否存在内存不足的问题。

三,SQL Server的Buffer Manager计数器

如果数据缓存在内存中,那么SQL Server从内存中直接读取数据,而不需要从物理Disk加载到内存。物理Disk能够执行预读操作,操作系统将物理Disk上的数据预先加载到内存中,在SQL Server进程访问数据时,该数据已经存在于内存中了。虽然SQL Server申请了物理读操作,但是,BCHR的测量值没有体现物理读操作,这是因为,在SQL Server读取数据时,数据是存在于内存中的,SQL Server执行的是逻辑读操作。

MemoryPage Reads/Sec

Buffer Manager计数器用于监视SQL Server如何使用内存数据页和计划缓存,读取和写入数据页时的Disk IO。由于Buffer Pool是SQL Server内存最活跃,使用最多的部分,所以也是最容易出现性能瓶颈的部分,计数值尤其重要:

推荐阅读《Great SQL Server Debates: Buffer Cache Hit Ratio》:

MemoryPage/Sec

  • Buffer Cache hit ration:从Buffer Pool中直接读取,不需要从Disk中读取的数据页的百分比,也叫命中率,这个计数器表示,在SQL Server读取数据时,数据存在于内存中,跟数据驻留在内存中的时间和内存压力关系不大,仅供参考。
  • Page Writes/sec:每秒写入到Disk的数据页数,和内存使用关系不大,跟用户修改的数据量有关
  • CheckPoint Pages/sec:将数据刷新到Disk的Dirty Pages的数量,和内存使用关系不大,跟用户修改的数据量有关,如果用户对数据库做了很多修改操作,那么内存中修改过的数据脏页就会比较多,每次刷新的脏页数量就会比较大
  • Lazy Writes/sec:被LazyWriter刷新的buffer数量,如果是脏页,那么将buffer写入到Disk,并将buffer空间标记为Free,如果不是脏页,那么该buffer空间也被标记为Free,LazyWriter的作用是维护一定数量的Free buffer,SQL Server使用Free buffer来加载新的数据页。
  • Page Life Expectancy:PLE,数据页驻留在内存中的时间。如果SQL Server没有新的内存需求,或有空闲的内存来完成新的内存需求,那么Lazy Writer不会被处罚,Page会一直驻留在Buffer Pool中,那么Page Life Expectancy会维持在一个比较高的水平;如果Page Life总是高高低低,表明SQL Server存在内存压力。PLE的参考数值是:Max Server Memory/4GB*300s,如果PLE值长期低于参考值,内存可能存在瓶颈。
  • Page Reads/sec:每秒从Disk读取的数据页数,即物理读的次数,如果用户访问的数据都缓存在内存中,那么SQL Server不需要从物理Disk上读取页面。由于物理IO的开销大,Page Reads操作一定会影响SQL Server的性能。
  • Free list stalls/sec:等待一个Free Page的请求数量,SQL Server申请从Disk加载一个Page到内存中,必须在内存中分配一个Buffer,Buffer Manager负责维护Free Buffer List,如果Free List没有任何Free Buffer,那么请求必须等待,直到有空闲的Buffer使用,才能将Disk中的Page加载到内存中。

BCHR only responds to significant memory pressure in conjunction with I/O subsystem pressure, or possibly fragmentation i.e. under conditions that impedes page read-ahead to the point that SQL Server becomes much less effective at populating the data cache with the required pages, before the query processor actually requires them for use.

MemoryPool Nonpaged BytesNonpaged Pool 和 Paged Pool 是操作系统在系统内核定义的两种内存资源。其中 NonPaged Pool 是指这块资源必须存储在物理内存中,而 Paged Pool 可以被写入页面交换文件。这两种资源在操作系统内部是有限的。一旦耗尽会导致系统失去相应。在 64 位系统中,由于地址空间的扩展和内存增大,资源耗尽的问题相对比较少见。监控这两种资源可以判断是否存在特定的资源泄露问题。

经常使用后四种计数器,探测系统的内存压力,前三种,仅供参考,在此,感谢 wy123 的帮助。

2,从Memory Manager计数器监控服务器内存总体使用情况

MemoryPool Paged Bytes

四,SQL Server的Memory Manager计数器

在一个非常繁忙的系统中,Lock内存和授予内存是常用的计数器:

Process(_Total)Working SetWorking Set是Windows平台一个常用术语,指的是某个进程在物理内存中使用的内存总量。单个进程的Working Set包含可共享部分(例如DLL文件的代码段)和私有部分(数据段)。其中可以跟踪私有部分的Working Set数值来判断是否内存使用量过高或是否存在内存泄露的问题。

Memory Manager计数器用于监控服务器内存总体使用情况,在一个非常繁忙的系统中,Lock内存和授予内存是常用的计数器:

  • Total Server Memory (KB):SQL Server当前使用的内存总量
  • Target Server Memory (KB):SQL Server能够使用的内存总量
  • Lock Memory (KB):SQL Server用于锁的内存总量
  • Grant Workspace Memory (KB):授予内存,SQL Server用于执行hash,排序和创建Index操作而消耗的内存总量
  • Memory Grants Pending (KB):等待内存授予的进程数量,如果进程不能获得指定数量的内存,那么进程将不会开始执行

Process(_Total)Working Set Private

  • Total Server Memory (KB):SQL Server当前使用的内存总量
  • Target Server Memory (KB):SQL Server能够使用的内存总量
  • Lock Memory (KB):SQL Server用于锁的内存总量
  • Grant Workspace Memory (KB):授予内存,SQL Server用于执行hash,排序和创建Index操作而消耗的内存总量
  • Memory Grants Pending (KB):等待内存授予的进程数量,如果进程不能获得指定数量的内存,那么进程将不会开始执行

 分析图表,除了Grant Workspace Memory 有变化之外,其余4个计数值都没有变化,说明SQL Server执行的操作需要授予内存,而Memory Grants Pending 计数值很小,几乎为0,说明SQL Server 不存在内存压力。

处理器相关

五,使用Performance Counter监控SQL Server数据库系统的整体性能

澳门新萄京 6

计数器说明

创建两个Data Set:Disk Activity,用于监控物理磁盘的活动;Memory Activity ,用于监控系统内存的Hard Fault和SQL Server的内存使用。

 

Processor Information(_Total)Processor PerformanceProcessor Frequency 反映了 CPU 的运行频率而 Processor Performance 反映了 CPU 的运行效能,比如在 CPU 主频的多大范围内运行。在物理系统上,由于 CPU 可能存在一些操作系统之外的功能来提高频率,这个数据有可能超过 100%。而在虚拟机环境中,正常数据应在 100% 以下。通常我们使用 Processor Performance 来判断 CPU 的负载效能。

澳门新萄京 7

结论:内存是数据库系统最重要的资源,操作系统和SQL Server对其的管理比较复杂,根据以上计数器的测量值,基本上能够推断出SQL Server是否存在内存压力,可以结合其他测量值进行佐证,例如,Committed Memory,Stolen Memory,Working Set,Paged Pool,Nonpaged Pool等,这里就不展开了。

Processor Information(_Total)Processor Frequency

 

 

Processor Information(_Total)Parking StatusParking 一般用于物理系统上有效安排系统的使用的物理内核,这样可以在负载较低时关闭一定的 CPU 处理能力而节省能源。在虚拟机的运行环境中处理了解 CPU 的负载状态外,没有特别的意义。

澳门新萄京:Server的内存压力,品质计数器。下文摘抄自《硬盘的读写原理》,作者是真实的归宿,写的非常详细:

拓展阅读:

Processor Information(_Total)% Interrupt Time系统使用的 CPU 时间片中,用于中断处理程序(ISR)的 CPU 时间。一般这个计数器的数值很低,在 5% 以下。如果数值较高,很有可能是硬件出现问题导致中断异常。

访盘请求完成过程

Process:Page File Bytes is the current amount of virtual memory, in bytes, that this process has reserved for use in the paging file(s). Paging files are used to store pages of memory used by the process that are not contained in other files. Paging files are shared by all processes, and the lack of space in paging files can prevent other processes from allocating memory. If there is no paging file, this counter reflects the current amount of virtual memory that the process has reserved for use in physical memor

Processor Information(_Total)% Processor TimeWindows 操作系统中,由于将代码运行模式划分为内核态(kernel mode)和用户态(User Mode),因此代码的运行时间也就相应被划分为 % Privileged Time 和 % User Time。而两者的总和为 % Processor Time。一般来讲,桌面应用程序和系统服务的 CPU 异常,反映在 User Time 上,而硬件,驱动程序和内核异常反映在 % Privileged Time 上。

当需要从磁盘读取数据时,系统会将数据逻辑地址传给磁盘,磁盘的控制电路按照寻址逻辑将逻辑地址翻译成物理地址,即确定要读的数据在哪个磁道,哪个扇区。 为了读取这个扇区的数据,需要将磁头放到这个扇区上方,为了实现这一点,磁头需要移动对准相应磁道,这个过程叫做寻道,所耗费时间叫做寻道时间,然后磁盘 旋转将目标扇区旋转到磁头下,这个过程耗费的时间叫做旋转时间。

参考doc:

Processor Information(_Total)% Privileged Time

即一次访盘请求(读/写)完成过程由三个动作组成:

Windows Performance Counters Explained

Processor Information(_Total)% User Time

  • 寻道(时间):磁头移动定位到指定磁道
  • 旋转延迟(时间):等待指定扇区从磁头下旋转经过
  • 数据传输(时间):数据在磁盘与内存之间的实际传输

Buffer cache hit ratio性能计数器真的可以作为内存瓶颈的判断指标吗?

系统资源,进程相关

因此在磁盘上读取扇区数据(一块数据)所需时间:Ti/o=寻道时间  旋转时间  n *传输时间

Great SQL Server Debates: Buffer Cache Hit Ratio

计数器说明

磁盘的读写原理

SQL Server memory performance metrics – Part 1 – Memory pages/sec and Memory page faults/sec

Process(_Total)% Processor Time操作系统会以每秒 100 次的频率产生内部中断,中断处理程序会去检查当时 CPU 上运行的各个线程,从而以次数来推断该线程/进程占用的时间片,继而计算出全部进程的 CPU 时间占用,即便单个进程的 CPU 统计可能有些的偏差,总计的数值应该精确的反应了 CPU 的负载压力。

系统将文件存储到磁盘上时,按柱面、磁头、扇区的方式进行,即最先是第1磁道的第一磁头下(也就是第1盘面的第一磁道)的所有扇区,然后,是同一柱面的下一磁头,……,一个柱面存储满后就推进到下一个柱面,直到把文件内容全部写入磁盘。系统也以相同的顺序读出数据。读出数据时通过告诉磁盘控制器要读出扇区所在的柱面号、磁头号和扇区号(物理地址的三个组成部分)进行。磁盘控制器则直接使磁头部件移动到相应的柱面,选通相应的磁头,等待要求的扇区移动到磁头下。在扇区到来时,磁盘控制器对扇区进行读写操作。

Process(_Total)Handle Count进程的句柄数一半代表了进程访问的系统对象的数目。通过判断句柄数过高,或者有异常增长状况,可以判断是否存在资源使用异常,或是泄露问题。

局部性原理与磁盘预读

Process(_Total)Page Faults/sec此计数器同 Memory/Page Faults/sec 意义相同,只是将各个进程引起的 Page Faults 累加得到。

由于存储介质的特性,磁盘本身存取就比主存慢很多,再加上机械运动耗费,磁盘的存取速度往往是主存的几百分分之一,因此为了提高效率,要尽量减少磁盘I/O。为了达到这个目的,磁盘往往不是严格按需读取,而是每次都会预读,即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。这样做的理论依据是计算机科学中著名的局部性原理:

Process(_澳门新萄京:Server的内存压力,品质计数器。Total)Private Bytes所有进程的私有内存空间(可以是在物理内存中,或者是在内存交换文件中的空间)总和。一般使用这个计数器来跟踪私有内存空间的变化趋势,从而判断是否有内存泄露的问题。

  • 当一个数据被用到时,其附近的数据也通常会马上被使用。
  • 程序运行期间所需要的数据通常比较集中。
  • 由于磁盘顺序读取的效率很高(不需要寻道时间,只需很少的旋转时间),因此对于具有局部性的程序来说,预读可以提高I/O效率。

Process(_Total)Thread Count所有进程中的线程数目总和。在 Windows 系统中,线程是真正执行代码的单元。线程数目可以反应出当前系统中运行的代码单元的多少。线程数目的异常变化,一定程度上反应了系统的负载变化。

预读的长度一般为页(page)的整倍数,页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每个存储块称为一页(在许多操作系统中,页得大小通常为4k),主存和磁盘以页为单位交换数据。当程序要读取的数据不在主存中时,会触发一个缺页异常,此时系统会向磁盘发出读盘信号,磁盘会找到数据的起始位置并向后连续读取一页或几页载入内存中,然后异常返回,程序继续运行。

SystemProcesses当前操作系统中运行的进程和线程总数。

 

SystemThreads

拓展阅读:常用的系统内存性能计数器的描述

Thread(_Total)Context Switches/secContext Switch 指的是在 CPU 上运行的线程被其他线程替代。在 Windows 系统中,Context Switch 是一个正常线程处理操作。这个数据的高低并不代表系统是否异常。系统管理员也无法对这个数据进行调整。通常我们可以根据长期观察到的单个系统上的 Context Switch 数值作为此系统的一个基础数值。只有出现极度异常的量级改变时,才需要引起注意。而这类问题也多发于物理设备异常。

Page Faults/sec is the average number of pages faulted per second. It is measured in number of pages faulted per second because only one page is faulted in each fault operation, hence this is also equal to the number of page fault operations. This counter includes both hard faults (those that require disk access) and soft faults (where the faulted page is found elsewhere in physical memory.) Most processors can handle large numbers of soft faults without significant consequence. However, hard faults, which require disk access, can cause significant delays.

磁盘相关

Page Reads/sec is the rate at which the disk was read to resolve hard page faults. It shows the number of reads operations, without regard to the number of pages retrieved in each operation. Hard page faults occur when a process references a page in virtual memory that is not in working set or elsewhere in physical memory, and must be retrieved from disk. This counter is a primary indicator of the kinds of faults that cause system-wide delays. It includes read operations to satisfy faults in the file system cache (usually requested by applications) and in non-cached mapped memory files. Compare the value of Memory\Pages Reads/sec to the value of Memory\Pages Input/sec to determine the average number of pages read during each operation.

计数器说明

Pages Input/sec is the rate at which pages are read from disk to resolve hard page faults. Hard page faults occur when a process refers to a page in virtual memory that is not in its working set or elsewhere in physical memory, and must be retrieved from disk. When a page is faulted, the system tries to read multiple contiguous pages into memory to maximize the benefit of the read operation. Compare the value of Memory\Pages Input/sec to the value of  Memory\Page Reads/sec to determine the average number of pages read into memory during each read operation.

PhysicalDisk(_Total)Disk Read Bytes/sec所有磁盘上的每秒读或写的数据量

Pages/sec is the rate at which pages are read from or written to disk to resolve hard page faults. This counter is a primary indicator of the kinds of faults that cause system-wide delays.  It is the sum of Memory\Pages Input/sec and Memory\Pages Output/sec.  It is counted in numbers of pages, so it can be compared to other counts of pages, such as Memory\Page Faults/sec, without conversion. It includes pages retrieved to satisfy faults in the file system cache (usually requested by applications) non-cached mapped memory files.

PhysicalDisk(_Total)Disk Write Bytes/sec

 

网络相关

参考文档:

计数器说明

Measuring Disk Latency with Windows Performance Monitor (Perfmon)

TCPv4Connection Failure连接失败的数量。连接失败指的是连接的状态从 SYN-SENT 或是 SYN-RCVD 直接被置为 CLOSED,或者是从 SYN-RCVD 状态置为 LISTEN。

SQL Server disk performance metrics – Part 1 – the most important disk performance metrics

TCPv4Connection Established当前系统中 TCP 连接的状态是 ESTABLISHED 或 CLOSE-WAIT 的数目。

Performance Monitor Counters

TCPv4Connection Reset连接被重置的数量。重置指的是 TCP 连接的状态从 ESTABLISHED 或是 CLOSE-WAIT 的直接被置为 CLOSED。

硬盘的读写原理

TCPv4Segments Received/sec当前建立的连接中,每秒接收的数据段,包括错误的数据段。

Great SQL Server Debates: Buffer Cache Hit Ratio

TCPv4Segments Restransmitted/sec每秒中重传的数据段数目。重传的数据段指的是数据段中包括 1 个以上的字节数是以前传送过的数据。

TCPv4Segments Sent/sec当前建立的连接中,每秒发送的数据段。但如果一个数据段中只包含之前的重传数据,则不被计入。

此外,Azure 平台还收集了一些 Windows 系统中应用相关的计数器,如 .Net,由于我们主要讨论的是虚拟机层面的监控,在此就不再具体解释。如果需要,可以参考相应的技术文档,如:.NET Framework 性能指标

Linux 虚拟机

与 Windows 虚拟机不同的是,Windows 虚拟机的某些性能指标指定了 _Total,也就是说系统已经统计了同一个指标在多个实例上的数据,比如多 CPU 系统,多个磁盘系统。在 Linux 虚拟机中,我们可以指定的是针对某一个特定实例还是总计的数值。具体设置请参照 :使用 Linux 诊断扩展监视性能指标及日志

内存相关:

计数器说明

Mem. Percent available当前系统的可用内存比例

Mem. Used by cache系统内存中被磁盘缓存使用的数量

Memory available当前系统可以使用的内存。可用内存指的是系统在收到内存请求时,可以不需要进行 Paging 操作,而直接可以使用的内存。他包括 Free 的内存和一部分可以被重新使用的 Cache 内存。

Memory percentage已用内存的比例

Memory used已用内存的数量

Page reads每秒中从后端存储中(swap file, program file, mapped file)读取写入总计的内存页的个数。这个数据对应于 Windows 平台的 Pages/Sec。

Page writes

Pages

Swap available这些数据分别对应了 swap 文件的可用空间大小,可用空间比例,已经使用的比例和已经使用的大小。

Swap percent available

Swap percent used

Swap used

Note

对于可用内存的理解,可以参照文档

处理器相关

计数器说明

CPU DPC time在 Linux 中很少提到 DPC Time, DPC 是在 Windows 平台中常用的一个术语,是中断处理程序将一些可以不在中断处理进程中的任务,以 DPC 的方式执行。在 Linux 中,这个数据应该是 SoftIRQ 的时间。应该是在 Interrupt 的一部分。

CPU IO wait Time这个时间很容易被理解为 CPU 等待同步 IO 完成的时间。实际上, IO Wait Time 是,CPU Idle Time 的一个子集。他指的是当某个 CPU 处于空闲状态时,至少有一个任务在等待他的磁盘 IO 完成,进而可以在此 CPU 上继续运行。因此,较低的 IO wait Time 并不能代表理想的磁盘性能,我们必须结合 CPU 的数量,使用率,磁盘的读写性能,读写模式来具体分析。

CPU idle timeCPU 在运行空闲进程的时间

CPU Interrupt timeCPU 运行在 Interrupt 模式的时间,包括硬件中断和软件中断。

CPU nice timeCPU 上运行 niced 进程所用到的时间。niced 进程指的是进程的 nice 级别(Priority)被改变的进程。

CPU percentageCPU 上运行非 Idle 线程的时间比例。

CPU privileged time在非 Idle 时间内,用于运行 Kernel 模式进程的时间比例

CPU user timeCPU 上运行非 niced 进程所用到的时间。

磁盘相关

计数器说明

Disk queue length磁盘队列长度。对于 Azure 标准存储账户中的磁盘,我们可以认为是 Spindle 是 1 的标准 IDE 磁盘。由于队列长度会影响磁盘 IO 完成的时间,如果 Disk Queue Length 持续高于 1,说明总是有磁盘 IO 在等待处理。需要结合 Disk Transfer Time 来判断当前的 IO 压力是否超过磁盘能力。

Disk read guest OS每秒磁盘中数据读取的总量

Disk read time完成每次读 IO 操作时需要的平均时间

Disk reads每秒磁盘上的进行读操作的次数

Disk total bytes每秒磁盘中数据传输的总量,包括读取和写入的数据总量。

Disk transfer time完成每次 IO 操作是需要的平均时间,一般来说,对于生产系统,理想的 IO 操作需要在 10ms 以内完成。超过 10ms,需要对具体的 IO 进行分析并引起注意。如果 IO 完成时间总是在 30ms 甚至以上,磁盘的效能应该不能满足当前的 IO 需求。

Disk transfers每秒磁盘上的进行读或写操作的次数,也就是经常提到的 IOPS。

Disk write guest OS每秒磁盘中数据写入的总量

Disk write time完成每次写 IO 操作时需要的平均时间

Disk writes每秒磁盘上的进行写操作的次数

网络相关

计数器说明

Network collisions从系统启动开始发生的网络冲突数量。如果持续出现冲突值表示网络基础架构存在性能瓶颈,而并非服务器。在 Azure 平台上,不应该看到网络冲突的发生。

Network in guest OS从系统启动开始计算的网络出口流量

Network out guest OS从系统启动开始计算的网络入口流量

Network total bytes从系统启动开始计算的网络传输数据总量

Packets received从系统启动开始计算的接收到的数据包个数

Packets received errors从系统启动开始计算的接收端数据包错误的个数

Packets sent从系统启动开始计算的发送的数据包个数

Packets sent errors从系统启动开始计算的发送端数据包错误的个数

以上是我们在 Azure 的管理门户中常用的性能技术器,在了解了这些计数器内容的基础上,我们可以设定警报,或是自动缩放功能。在下一篇文章中我们会具体了解这些数据是如何被收集并存放的。

立即访问

本文由澳门新萄京发布于数据库,转载请注明出处:澳门新萄京:Server的内存压力,品质计数器

上一篇:陆拾个人win7安装mysqlzip包的款式,zip版_Mysql_脚本 下一篇:没有了
猜你喜欢
热门排行
精彩图文