查看磁盘性能.docx

上传人:b****1 文档编号:321791 上传时间:2022-10-08 格式:DOCX 页数:16 大小:97.15KB
下载 相关 举报
查看磁盘性能.docx_第1页
第1页 / 共16页
查看磁盘性能.docx_第2页
第2页 / 共16页
查看磁盘性能.docx_第3页
第3页 / 共16页
查看磁盘性能.docx_第4页
第4页 / 共16页
查看磁盘性能.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

查看磁盘性能.docx

《查看磁盘性能.docx》由会员分享,可在线阅读,更多相关《查看磁盘性能.docx(16页珍藏版)》请在冰豆网上搜索。

查看磁盘性能.docx

查看磁盘性能

windows下如何查看磁盘IO性能  

2011-07-1814:

22:

32|  分类:

 Windows |  标签:

磁盘io  |字号 订阅

通常,我们很容易观察到数据库服务器的内存和CPU压力。

但是对I/O压力没有直观的判断方法。

磁盘有两个重要的参数:

Seektime、Rotationallatency。

正常的I/O计数为:

①1000/(Seektime+Rotationallatency)*0.75,在此范围内属正常。

当达到85%的I/O计数以上时则基本认为已经存在I/O瓶劲。

理论情况下,磁盘的随机读计数为125、顺序读计数为225。

对于数据文件而言是随机读写,日志文件是顺序读写。

因此,数据文件建议存放于RAID5上,而日志文件存放于RAID10或RAID1中。

 

下面假设在有4块硬盘的RAID5中观察到的PhysicalDisk性能对象的部分值:

 

Avg.DiskQueueLength12 

Avg.DiskSec/Read.035 

Avg.DiskSec/Write.045 

DiskReads/sec320 

DiskWrites/sec100 

Avg.DiskQueueLength,12/4=3,每块磁盘的平均队列建议不超过2。

 

Avg.DiskSec/Read一般不要超过11~15ms。

 

Avg.DiskSec/Write一般建议小于12ms。

 

从上面的结果,我们看到磁盘本身的I/O能力是满足我们的要求的,原因是因为有大量的请求才导致队列等待,这很可能是因为你的SQL语句导致大量的表扫描所致。

在进行优化后,如果还是不能达到要求,下面的公式可以帮助你计算使用几块硬盘可以满足这样的并发要求:

 

Raid0--I/Osperdisk=(reads+writes)/numberofdisks

Raid1--I/Osperdisk=[reads+(2*writes)]/2

Raid5--I/Osperdisk=[reads+(4*writes)]/numberofdisks

Raid10--I/Osperdisk=[reads+(2*writes)]/numberofdisks 

我们得到的结果是:

(320+400)/4=180,这时你可以根据公式①来得到磁盘的正常I/O值。

假设现在正常I/O计数为125,为了达到这个结果:

720/125=5.76。

就是说要用6块磁盘才能达到这样的要求。

 

但是上面的DiskReads/sec和DiskWrites/sec是个很难正确估算的值。

因此只能在系统比较忙时,大概估算一个平均值,作为计算公式的依据。

另一个是你很难从客户那里得到Seektime、Rotationallatency参数的值,这也只能用理论值125进行计算。

#############################################

#############################################

前言

作为一个数据库管理员,关注系统的性能是日常最重要的工作之一,而在所关注的各方面的性能只能IO性能却是最令人头痛的一块,面对着各种生涩的参数和令人眼花缭乱的新奇的术语,再加上存储厂商的忽悠,总是让我们有种云里雾里的感觉。

本系列文章试图从基本概念开始对磁盘存储相关的各种概念进行综合归纳,让大家能够对IO性能相关的基本概念,IO性能的监控和调整有个比较全面的了解。

在这一部分里我们先舍弃各种结构复杂的存储系统,直接研究一个单独的磁盘的性能问题,藉此了解各个衡量IO系统系能的各个指标以及之间的关系。

几个基本的概念

在研究磁盘性能之前我们必须先了解磁盘的结构,以及工作原理。

不过在这里就不再重复说明了,关系硬盘结构和工作原理的信息可以参考维基百科上面的相关词条——Harddiskdrive(英文)和硬盘驱动器(中文)。

读写IO(Read/WriteIO)操作

磁盘是用来给我们存取数据用的,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据时候对应的是写IO操作,取数据的时候对应的是是读IO操作。

单个IO操作

当控制磁盘的控制器接到操作系统的读IO操作指令的时候,控制器就会给磁盘发出一个读数据的指令,并同时将要读取的数据块的地址传递给磁盘,然后磁盘会将读取到的数据传给控制器,并由控制器返回给操作系统,完成一个写IO的操作;同样的,一个写IO的操作也类似,控制器接到写的IO操作的指令和要写入的数据,并将其传递给磁盘,磁盘在数据写入完成之后将操作结果传递回控制器,再由控制器返回给操作系统,完成一个写IO的操作。

单个IO操作指的就是完成一个写IO或者是读IO的操作。

随机访问(RandomAccess)与连续访问(SequentialAccess)

随机访问指的是本次IO所给出的扇区地址和上次IO给出扇区地址相差比较大,这样的话磁头在两次IO操作之间需要作比较大的移动动作才能重新开始读/写数据。

相反的,如果当次IO给出的扇区地址与上次IO结束的扇区地址一致或者是接近的话,那磁头就能很快的开始这次IO操作,这样的多个IO操作称为连续访问。

因此尽管相邻的两次IO操作在同一时刻发出,但如果它们的请求的扇区地址相差很大的话也只能称为随机访问,而非连续访问。

顺序IO模式(QueueMode)/并发IO模式(BurstMode)

磁盘控制器可能会一次对磁盘组发出一连串的IO命令,如果磁盘组一次只能执行一个IO命令时称为顺序IO;当磁盘组能同时执行多个IO命令时,称为并发IO。

并发IO只能发生在由多个磁盘组成的磁盘组上,单块磁盘只能一次处理一个IO命令。

 

单个IO的大小(IOChunkSize)

熟悉数据库的人都会有这么一个概念,那就是数据库存储有个基本的块大小(BlockSize),不管是SQLServer还是Oracle,默认的块大小都是8KB,就是数据库每次读写都是以8k为单位的。

那么对于数据库应用发出的固定8k大小的单次读写到了写磁盘这个层面会是怎么样的呢,就是对于读写磁盘来说单个IO操作操作数据的大小是多少呢,是不是也是一个固定的值?

答案是不确定。

首先操作系统为了提高IO的性能而引入了文件系统缓存(FileSystemCache),系统会根据请求数据的情况将多个来自IO的请求先放在缓存里面,然后再一次性的提交给磁盘,也就是说对于数据库发出的多个8K数据块的读操作有可能放在一个磁盘读IO里就处理了。

还有对于有些存储系统也是提供了缓存(Cache)的,接收到操作系统的IO请求之后也是会将多个操作系统的IO请求合并成一个来处理。

不管是操作系统层面的缓存还是磁盘控制器层面的缓存,目的都只有一个,提高数据读写的效率。

因此每次单独的IO操作大小都是不一样的,它主要取决于系统对于数据读写效率的判断。

当一次IO操作大小比较小的时候我们成为小的IO操作,比如说1K,4K,8K这样的;当一次IO操作的数据量比较的的时候称为大IO操作,比如说32K,64K甚至更大。

在我们说到块大小(BlockSize)的时候通常我们会接触到多个类似的概念,像我们上面提到的那个在数据库里面的数据最小的管理单位,Oralce称之为块(Block),大小一般为8K,SQLServer称之为页(Page),一般大小也为8k。

在文件系统里面我们也能碰到一个文件系统的块,在现在很多的Linux系统中都是4K(通过/usr/bin/time-v可以看到),它的作用其实跟数据库里面的块/页是一样的,都是为了方便数据的管理。

但是说到单次IO的大小,跟这些块的大小都是没有直接关系的,在英文里单次IO大小通常被称为是IOChunkSize,不会说成是IOBlockSize的。

IOPS(IOperSecond)

IOPS,IO系统每秒所执行IO操作的次数,是一个重要的用来衡量系统IO能力的一个参数。

对于单个磁盘组成的IO系统来说,计算它的IOPS不是一件很难的事情,只要我们知道了系统完成一次IO所需要的时间的话我们就能推算出系统IOPS来。

现在我们就来推算一下磁盘的IOPS,假设磁盘的转速(RotationalSpeed)为15KRPM,平均寻道时间为5ms,最大传输速率为40MB/s(这里将读写速度视为一样,实际会差别比较大)。

对于磁盘来说一个完整的IO操作是这样进行的:

当控制器对磁盘发出一个IO操作命令的时候,磁盘的驱动臂(ActuatorArm)带读写磁头(Head)离开着陆区(LandingZone,位于内圈没有数据的区域),移动到要操作的初始数据块所在的磁道(Track)的正上方,这个过程被称为寻址(Seeking),对应消耗的时间被称为寻址时间(SeekTime);但是找到对应磁道还不能马上读取数据,这时候磁头要等到磁盘盘片(Platter)旋转到初始数据块所在的扇区(Sector)落在读写磁头正上方的之后才能开始读取数据,在这个等待盘片旋转到可操作扇区的过程中消耗的时间称为旋转延时(RotationalDelay);接下来就随着盘片的旋转,磁头不断的读

/写相应的数据块,直到完成这次IO所需要操作的全部数据,这个过程称为数据传送(DataTransfer),对应的时间称为传送时间(TransferTime)。

完成这三个步骤之后一次IO操作也就完成了。

在我们看硬盘厂商的宣传单的时候我们经常能看到3个参数,分别是平均寻址时间、盘片旋转速度以及最大传送速度,这三个参数就可以提供给我们计算上述三个步骤的时间。

第一个寻址时间,考虑到被读写的数据可能在磁盘的任意一个磁道,既有可能在磁盘的最内圈(寻址时间最短),也可能在磁盘的最外圈(寻址时间最长),所以在计算中我们只考虑平均寻址时间,也就是磁盘参数中标明的那个平均寻址时间,这里就采用当前最多的10krmp硬盘的5ms。

第二个旋转延时,和寻址一样,当磁头定位到磁道之后有可能正好在要读写扇区之上,这时候是不需要额外额延时就可以立刻读写到数据,但是最坏的情况确实要磁盘旋转整整一圈之后磁头才能读取到数据,所以这里我们也考虑的是平均旋转延时,对于10krpm的磁盘就是(60s/15k)*(1/2)=2ms。

第三个传送时间,磁盘参数提供我们的最大的传输速度,当然要达到这种速度是很有难度的,但是这个速度却是磁盘纯读写磁盘的速度,因此只要给定了单次IO的大小,我们就知道磁盘需要花费多少时间在数据传送上,这个时间就是IOChunkSize/MaxTransferRate。

现在我们就可以得出这样的计算单次IO时间的公式:

IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO ChunkSize/Transfer Rate

于是我们可以这样计算出IOPS

IOPS = 1/IO Time = 1/(Seek Time + 60 sec/Rotational Speed/2 + IOChunk Size/Transfer Rate)

对于给定不同的IO大小我们可以得出下面的一系列的数据

4K (1/7.1 ms = 140 IOPS)

   5ms + (60sec/15000RPM/2) + 4K/40MB = 5 + 2 + 0.1 = 7.1

8k (1/7.2 ms = 139 IOPS)

   5ms + (60sec/15000RPM/2) + 8K/40MB = 5 + 2 + 0.2 = 7.2

16K (1/7.4 ms = 135 IOPS)

   5ms + 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1