版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档交流精品文档交流Windows性能计数器-- 磁盘性能分析 DiskPhysicalDisk :单次IO大小Avg.DiskBytes/ReadAvg.DiskBytes/WriteIO响应时间Avg.Disksec/Read 磁盘每次读取需要的时间,一般不超过一般不要超过11~15ms。Avg.Disksec/Write 一般小于每秒读/写的IO数)理论情况下,磁盘的随机读计数为 、 顺序读计数为 实际测试值与理论值对比,从而判断磁盘是否为瓶颈DiskReads/secDiskWrites/secDiskTransfers/secIO吞吐率(磁盘每秒读 /写字节数)DiskBytes/secDiskReadBytes/secDiskWriteBytes/sec磁盘队列长度Avg.DiskQueueLength :磁盘平均队列长度不应超过 2,即:队列长度/磁盘数磁盘有两个重要的参数: Seektime、Rotational latency 。正常的I/O计数为:①1000/(Seektime+Rotationallatency)*0.75,在此范围内属正常。当达到%的I/O计数以上时则基本认为已经存在I/O瓶颈。理论、顺序读计数为。对于数据文件而言是随机读写,日志文件是顺序读写。因此,数据文件建议存放于RAID5件存放于RAID10或RAID1中。附:00IOPS00IOPS0:0IOPS下面假设在有 4块硬盘的RAID5中观察到的 PhysicalDisk 性能对象的部值:Avg.DiskQueueLength12 队列长度Avg.DiskSec/Read.035 读数据所用时间 msAvg.DiskSec/Write.045 写数据所用时间 DiskReads/sec320 每秒读数据量DiskWrites/sec100 每秒写数据量Avg.DiskQueueLength ,12/4=3,每块磁盘的平均队列建议不超过 2Avg.DiskSec/Read 一般不要超过 。Avg.DiskSec/Write 一般建议小于 。从上面的结果,我们看到磁盘本身的 I/O 能力是满足我们的要求的, 原因是因有大量的请求才导致队列等待, 这很可能是因为你的 语句导致大量的表扫描所致。在进行优化后,如果还是不能达到要求, 下面的公式可以帮助你计算使用几块硬盘可以满足这样的并发要求 :Raid0--I/Osperdisk=(reads+writes)/numberofdisksRaid1--I/Osperdisk=[reads+(2*writes)]/2Raid5--I/Osperdisk=[reads+(4*writes)]/numberofdisksRaid10--I/Osperdisk=[reads+(2*writes)]/numberofdisks我们得到的结果是: (320+400)/4=180,这时你可以根据公式①来得到磁盘的正常I/O值。假设现在正常 I/O计数为为了达到这个结果: 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)与连续访问 Access)随机访问指的是本次 IO所给出的扇区地址和上次 IO给出扇区地址相差比较大这样的话磁头在两次 IO操作之间需要作比较大的移动动作才能重新开始读 /写数据。相反的,如果当次 IO给出的扇区地址与上次 IO结束的扇区地址一致或者是接近的话,那磁头就能很快的开始这次 IO操作这样的多个 IO操作称为连访问。因此尽管相邻的两次 IO操作在同一时刻发出,但如果它们的请求的扇区地址相差很大的话也只能称为随机访问,而非连续访问。顺序 IO模式(QueueMode)/并发 IO模式(BurstMode)磁盘控制器可能会一次对磁盘组发出一连串的 IO命令,如果磁盘组一次只能执行一个IO命令时称为顺序 IO;当磁盘组能同时执行多个 IO命令时,称为并IO。并发IO只能发生在由多个磁盘组成的磁盘组上,单块磁盘只能一次处理一个IO命令。单个 IO的大小(IOChunkSize)熟悉数据库的人都会有这么一个概念,那就是数据库存储有个基本的块大小(BlockSize) ,不管是SQLServer还是Oracle,默认的块大小都是 就是数据库每次读写都是以 8k为单位的那么对于数据库应用发出的固定 8k大小的单次读写到了写磁盘这个层面会是怎么样的呢,就是对于读写磁盘来说单个 IO操作操作数据的大小是多少呢, 是不是也是一个固定的值?答案是不确定。 首先操作系统为了提高 IO的性能而引入了文件系统缓存 (FileSystemCache) ,系统会根据请求数据的情况将多个来自 IO的请求先放在缓存里面,然后再一次性的提交给磁盘,也就是说对于数据库发出的多个 8K数据块的读操作有可能放在一个磁盘读 IO里就处理了。还有对于有些存储系统也是提供了缓存 的接收到操作系统的 IO请求之后也是会将多个操作系统的 IO请求合并成一个来处理不管是操作系统层面的缓存还是磁盘控制器层面的缓存, 目的都只有一个提高数据读写的效率。因此每次单独的 IO操作大小都是不一样的,它主要取决于系统对于数据读写效率的判断。当一次IO操作大小比较小的时候我们成为小的IO操作,比如说8K这样的;当一次IO操作的数据量比较的的时候称为大IO操作,比如说甚至更大。在我们说到块大小( BlockSize)的时候通常我们会接触到多个类似的概念,像我们上面提到的那个在数据库里面的数据最小的管理单位, Oralce称之为块(Block) ,大小一般为 SQLServer称之为页(Page),一般大小也为 8k。在文件系统里面我们也能碰到一个文件系统的块, 在现在很多的 Linux 系统中都是通过 /usr/bin/time -v 可以看到),它的作用其实跟数据库里面的块 /是一样的,都是为了方便数据的管理。但是说到单次 IO的大小,跟这些块的大小都是没有直接关系的,在英文里单次 IO大小通常被称为是 IOChunkSize,不会说成是 IOBlockSize 的。IOPS(IOperSecond)系统每秒所执行 IO操作的次数,是一个重要的用来衡量系统 IO能的一个参数。对于单个磁盘组成的 IO系统来说,计算它的 不是一件很难的事情,只要我们知道了系统完成一次 IO所需要的时间的话我们就能推算出系统IOPS来。现在我们就来推算一下磁盘的 假设磁盘的转速(Rotational Speed)为平均寻道时间为 最大传输速率为 (这里将读写速度视为一样,实际会差别比较大)。对于磁盘来说一个完整的 IO操作是这样进行的:当控制器对磁盘发出一个 IO操作命令的时候,磁盘的驱动臂 (ActuatorArm) 带读写磁头(Head)离开着陆区(LandingZone,位于内圈没有数据的区域 ),移动到要操作的初始数据块所在的磁道(Track) 的正上方,这个过程被称为寻址(Seeking)对应消耗的时间被称为寻址时间(SeekTime)但是找到对应磁道还不能马上读取数据, 这时候磁头要等到磁盘盘片(Platter) 旋转到初始数据块所在的扇区 (Sector) 落在读写磁头正上方的之后才能开始读取数据,在这个等待盘片旋转到可操作扇区的过程中消耗的时间称为旋转延时(RotationalDelay) ;接下来就随着盘片的旋转,磁头不断的读/写相应的数据块,直到完成这次 IO所需要操作的全部数据,这个过程称为据传送(DataTransfer) 对应的时间称为传送时间 (TransferTime) 完成这三个步骤之后一次IO操作也就完成了。在我们看硬盘厂商的宣传单的时候我们经常能看到 3个参数分别是平均寻址间盘片旋转速度以及最大传送速度, 这三个参数就可以提供给我们计算上述三个步骤的时间。第一个寻址时间考虑到被读写的数据可能在磁盘的任意一个磁道, 既有可能磁盘的最内圈(寻址时间最短),也可能在磁盘的最外圈(寻址时间最长),所以在计算中我们只考虑平均寻址时间, 也就是磁盘参数中标明的那个平均寻址时间,这里就采用当前最多的 10krmp硬盘的。第二个旋转延时和寻址一样,当磁头定位到磁道之后有可能正好在要读写扇区之上,这时候是不需要额外额延时就可以立刻读写到数据, 但是最坏的情况确要磁盘旋转整整一圈之后磁头才能读取到数据, 所以这里我们也考虑的是平均旋转延时,对于 10krpm的磁盘就是(60s/15k)*(1/2)=2ms 。第三个传送时间磁盘参数提供我们的最大的传输速度, 当然要达到这种速度很有难度的,但是这个速度却是磁盘纯读写磁盘的速度,因此只要给定了单次IO的大小,我们就知道磁盘需要花费多少时间在数据传送上,这个时间就是IOChunkSize/MaxTransferRate 。现在我们就可以得出这样的计算 单次IO时间的公式:IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO Size/Transfer Rate于是我们可以这样计算出 IOPSIOPS = 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.18k (1/7.2 ms = 139 IOPS)5ms + (60sec/15000RPM/2) + 8K/40MB = 5 + 2 + 0.2 =7.216K (1/7.4 ms = 135 IOPS)+16K/40MB=5+2+16K/40MB=5+2+0.4=+32K/40MB=5+2+0.8=+64K/40MB=5+2+1.6=7.432K (1/7.8 ms = 128 IOPS)5ms + (60sec/15000RPM/2)7.864K (1/8.6 ms = 116 IOPS)5ms + (60sec/15000RPM/2)8.6从上面的数据可以看出, 当单次IO越小的时候,单次 IO所耗费的时间也越少相应的IOPS也就越大。上面我们的数据都是在一个比较理想的假设下得出来的, 这里的理想的情况就是磁盘要花费平均大小的寻址时间和平均的旋转延时, 这个假设其实是比较符合我们实际情况中的随机读写,在随机读写中,每次 IO操作的寻址时间和旋转延时都不能忽略不计,有了这两个时间的存在也就限制了 IOPS的大小。现在我们考虑一种相对极端的顺序读写操作, 比如说在读取一个很大的存储连续分布在磁盘的文件,因为文件的存储的分布是连续的,磁头在完成一个读 IO操作之后,不需要从新的寻址,也不需要旋转延时,在这种情况下我们能到一个很大的 值,如下4K(1/0.1ms=10000 IOPS)0ms+0ms+ 4K/40MB =0.18k(1/0.2ms=5000 IOPS)0ms+0ms+ 8K/40MB =0.216K(1/0.4ms =2500 IOPS)0ms+ 0ms+ 16K/40MB=0.432K(1/0.8ms =1250 IOPS)0ms+ 0ms+ 32K/40MB=0.864K(1/1.6ms =625 IOPS)0ms+ 0ms+ 64K/40MB=1.6相比第一组数据来说差距是非常的大的,因此当我们要用 IOPS来衡量一个 IO系统的系能的时候我们一定要说清楚是在什么情况的 也就是要说明读写的方式以及单次 IO的大小,当然在实际当中,特别是在的系统的,随机小IO的读写是最有说服力的。传输速度(TransferRate)/ 吞吐率(Throughput)现在我们要说的传输速度(另一个常见的说法是吞吐率) 不是磁盘上所表明的大传输速度或者说理想传输速度, 而是磁盘在实际使用的时候从磁盘系统总线上流过的数据量。有了 IOPS数据之后我们是很容易就能计算出对应的传输速度来的Transfer Rate = IOPS * IO Chunk Size8K:139* 8K=1112K/40M=2.71%16K:135* 16K=2160K/40M=5.27%32K:116* 32K8K:139* 8K=1112K/40M=2.71%16K:135* 16K=2160K/40M=5.27%32K:116* 32K=3712K/40M=9.06%可以看出实际上的传输速度是很小的,对总线的利用率也是非常的小。这里一定要明确一个概念,那就是尽管上面我们使用 IOPS来计算传输速度,但是实际上传输速度和 IOPS是没有直接关系,在没有缓存的情况下它们共同的决定因素都是对磁盘系统的访问方式以及单个 IO的大小。对磁盘进行随机访问时候我们可以利用 IOPS来衡量一个磁盘系统的性能,此时的传输速度不会太大;但是当对磁盘进行连续访问时,此时的 IOPS已经没有了参考的价值,这个时候限制实际传输速度却是磁盘的最大传输速度。因此在实际的应用当中,只会用IOPS 来衡量小IO的随机读写的性能,而当要衡量大 IO连续读写的性能的时就要采用传输速度而不能是 IOPS了。IO响应时间(IOResponseTime)最后来关注一下能直接描述 IO性能的IO响应时间。IO响应时间也被称为 IO时(IOLatency) ,IO响应时间就是从操作系统内核发出的一个读或者写的 IO命令到操作系统内核接收到 IO回应的时间,注意不要和单个 IO时间混淆了,单个IO时间仅仅指的是 IO操作在磁盘内部处理的时间,而 IO响应时间还要包括 IO操作在IO等待队列中所花费的等待时间。计算IO操作在等待队列里面消耗的时间有一个衍生于利托氏定理(Little’sLaw)的排队模型M/M/1模型可以遵循,由于排队模型算法比较复杂,到现在还没有搞太明白(如果有谁对M/M/1模型比较精通的话欢迎给予指导这里就罗列一下最后的结果,还是那上面计算的IOPS数据来说:8K IO Chunk Size (135 IOPS, 7.2 135 => 240.0 ms105 => 29.5 ms75 => 15.7 ms45 => 10.6 ms64KIOChunkSize(116IOPS,8.6ms)135 => 没响应了⋯⋯105 => 88.6 ms75 => 24.6 ms45 => 14.6 ms从上面的数据可以看出,随着系统实际 IOPS越接近理论的最大值, IO的响应间会成非线性的增长,越是接近最大值,响应时间就变得越大, 而且会比预期超出很多。一般来说在实际的应用中有一个 的指导值,也就是说在 IO读写的队列中,当队列大小小于最大 IOPS的的时候,IO的响应时间增加会很小,相对来说让人比较能接受的,一旦超过 响应时间就会戏剧性的暴增,所以当一个系统的 IO压力超出最大可承受压力的 的时候就是必须要考虑调整或升级了。另外补充说一下这个的指导值也适用于过的,一旦超过精品文档交流精品文档交流从上一篇文章的计算中我们可以看到一个 15k转速的磁盘在随机读写访问的情况下IOPS竟然只有140左右,但在实际应用中我们却能看到很多标有 甚至更高的存储系统,有这么大 IOPS的存储系统怎么来的呢?这就要归结于各种存储技术的使用了,在这些存储技术中使用最广的就是高速缓存 (Cache)和磁盘冗余阵列(RAID)了,本文就将探讨缓存和磁盘阵列提高存储 IO性能的方法。高速缓存(Cache)在当下的各种存储产品中,按照速度从快到慢应该就是内存 闪存磁盘磁带了然而速度越快也就意味着价格越高, 闪存虽然说是发展势头很好, 但目前来说却还是因为价格问题无法普及, 因此现在还是一个磁盘作霸王的时代。 与和内存速度相比,磁盘的速度无疑是计算机系统中最大的瓶颈了, 所以在必须使用磁盘而又想提高性能的情况下,人们想出了在磁盘中嵌入一块高速的内存 用来保存经常访问的数据从而提高读写效率的方法来折中的解决, 这块嵌入的内存就被称为高速缓存。说到缓存,这东西应用现在已经是无处不在, 从处于上层的应用,到操作系统层再到磁盘控制器,还有内部,单个磁盘的内部也都存在缓存, 所有这些缓存存在的目的都是相同的,就是提高系统执行的效率。当然在这里我们只关心跟IO性能相关的缓存,与 IO性能直接相关的几个缓存分别是 文件系统缓存(FileSystemCache) 、磁盘控制器缓存(DiskControllerCache) 和磁盘缓存(DiskCache,也称为DiskBuffer) ,不过当在计算一个磁盘系统性能的时候文件系统缓存也是不会考虑在内的, 因此我们重点考察的就是磁盘控制器缓存和磁缓存。不管是控制器缓存还是磁盘缓存,他们所起的作用主要是分为三部分: 缓存数据预读(Read-ahead)和回写(Write-back) 。缓存数据首先是系统读取过的数据会被缓存在高速缓存中, 这样下次再次需要读取相同的数据的时候就不用在访问磁盘, 直接从缓存中取数据就可以了。 当然使用过的据也不可能在缓存中永久保留的,缓存的数据一般那是采取 算法来进行管理目的是将长时间不用的数据清除出缓存, 那些经常被访问的却能一直保留在缓存中,直到缓存被清空。预读预读是指采用预读算法在没有系统的IO请求的时候事先将数据从磁盘中读入到缓存中,然后在系统发出读IO请求的时候,就会实现去检查看看缓存里面是否存在要读取的数据,如果存在(即命中)的话就直接将结果返回,这时候的磁盘精品文档交流精品文档交流不再需要寻址、旋转等待、读取数据这一序列的操作了, 这样是能节省很多时的;如果没有命中则再发出真正的读取磁盘的命令去取所需要的数据。缓存的命中率跟缓存的大小有很大的关系, 理论上是缓存越大的话,所能缓存的数据也就越多,这样命中率也自然越高, 当然缓存不可能太大, 毕竟成本在那儿呢如果一个容量很大的存储系统配备了一个很小的读缓存的话, 这时候问题会比较大的,因为小缓存的数据量非常小, 相比整个存储系统来说比例非常低, 样随机读取(数据库系统的大多数情况) 的时候命中率也自然就很低, 这样的缓存不但不能提高效率(因为绝大部分读 IO都还要读取磁盘),反而会因为每次去匹配缓存而浪费时间。执行读IO操作是读取数据存在于缓存中的数量与全部要读取数据的比值称为缓存命中率(ReadCacheHitRadio) ,假设一个存储系统在不使用缓存的情况下机小IO读取能达到 而它的缓存能提供 的缓存命中率的话,那么际上它的IOPS可以达到150/(1-10%)=166。回写首先说一下,用于回写功能的那部分缓存被称为写缓存 (WriteCache)在一套缓存打开的存储中,操作系统所发出的一系列写 IO命令并不会被挨个的执行,这些写IO的命令会先写入缓存中,然后再一次性的将缓存中的修改推到磁盘中,这就相当于将那些相同的多个 IO合并成一个,多个连续操作的小 IO合并成一大的还有就是将多个随机的写 IO变成一组连续的写 这样就能减少磁盘寻址等操作所消耗的时间,大大的提高磁盘写入的效率。读缓存虽然对效率提高是很明显的, 但是它所带来的问题也比较严重, 因为缓存和普通内存一样,掉点以后数据会全部丢失,当操作系统发出的写 IO命令写入到缓存中后即被认为是写入成功, 而实际上数据是没有被真正写入磁盘的, 此时如果掉电,缓存中的数据就会永远的丢失了, 这个对应用来说是灾难性的, 目解决这个问题最好的方法就是给缓存配备电池了, 保证存储掉电之后缓存数据能如数保存下来。和读一样,写缓存也存在一个写缓存命中率(WriteCacheHitRadio)缓存命中情况不一样的是,尽管缓存命中,也不能将实际的IO操作免掉,只是被合并了而已。控制器缓存和磁盘缓存除了上面的作用之外还承当着其他的作用,比如磁盘缓存有保存IO命令队列的功能,单个的磁盘一次只能处理一个IO命令,但却能接收多个IO命令,这些进入到磁盘而未被处理的命令就保存在缓存中的IO队列中。RAID(RedundantArrayOfInexpensiveDisks)如果你是一位数据库管理员或者经常接触服务器,那对 RAID应该很熟悉了,作为最廉价的存储解决方案, RAID早已在服务器存储中得到了普及。在 RAID的各个级别中,应当以和(不过已经基本走到头了,6正在崛起中,看看这里了解下原因)应用最广了。下面将就 这几种级别的 RAID展开说一下磁盘阵列对于磁盘性能的影响,当然在阅读下面的内容之前你必须对各个级别的 RAID的结构和工作原理要熟悉才行,这样才不至于满头雾水,推荐查看 wikipedia 上面的如下条目: StandardRAIDlevels ,NestedRAIDlevels 。RAID0RAID0将数据条带化(striping) 将连续的数据分散在多个磁盘上进行存取, 系发出的IO命令(不管读 IO和写IO都一样)就可以在磁盘上被并行的执行,每个磁盘单独执行自己的那一部分请求,这样的并行的 IO操作能大大的增强整个存储系统的性能。假设一个 RAID0阵列有n(n>=2)个磁盘组成,每个磁盘的随机读写的IO能力都达到 140的话,那么整个磁盘阵列的 IO能力将是 140*n。同如果在阵列总线的传输能力允许的话 RAID0的吞吐率也将是单个磁盘的 n倍。RAID1RAID1在容量上相当于是将两个磁盘合并成一个磁盘来使用了,互为镜像的两个磁盘里面保存的数据是完全一样的,因此在并行读取的时候速度将是n个磁盘速写入速度只有n/2。RAID5我们那一个有 n(n>=3)个磁盘的 阵列来看,首先看看 RAID5阵列的读 RAID5是支持并行 IO的,而磁盘上的数据呈条带状的分布在所有的磁盘上,因此读IO的速度相当于所有磁盘速度的总和。 不过这是在没有磁盘损坏的情况下,当有一个磁盘故障的时候读取速度也是会下降的, 因为中间需要花时间来计算失磁盘上面的数据。读取数据的情况相对就要复杂的多了,先来看下 RAID5奇偶校验数据写入的过程,我们把写入的数据称为 当磁盘拿到一个写 IO的命令的时候,它首先会读取一次要写入的地址的数据块中修改之前的数据 然后再读取到当前条带中的校验信息 接下来就根据 这三组数据计算出数据写入之后的条带的奇偶校验信息 最后发出两个写 IO的命令,一个写入 另一个写奇偶校验信息 。可以看出阵列在实际操作的时候需要读、读、写、写一共 4个 IO才能完成一次写 IO操作,也就是实际上的写入速度只有所有磁盘速度总和的1/4从这点可以看出 RAID5是非常不适合用在要大批量写入数据的系统的。RAID6RAID6和很类似,差别就在于 RAID6多了一个用于校验的磁盘。就读 IO速度上来说这两个是完全一样的,都是所有磁盘 IO速度的总和。在写IO上也很是类似,不同的是 将一个命令分成了三次读、三次写一共 次IO命令才能完成,也就是 RAID6实际写入磁盘的速度是全部磁盘速度之和的1/6。可以看出从写 IO看RAID6比RAID5差别是很大的。RAID10RAID0 读写速度都很好,却没有冗余保护; 和RAID6都有同样的毛病就是写入的时候慢,读取的时候快。那么 RAID1呢?嗯,这里要说的就是 其实不管是 RAID10还是其实都是组合大于 2块磁盘时候的 当先镜像后条带时候就称为 先条带后镜像的时候称为 。从性能上看RAID01和RAID10都是一样的,都是 RAID1嘛,但是RAID10在重建故障磁盘的时候性能比 RAID01 要快。因为 其实就是所以它的性能与RAID1也就是一样的了,这里不需要再做过多的讨论。四个性能指标的变化IO响应时间(IOResponseTime)在任何时候 IO响应时间值得都是单个 IO的响应时间,因此,不管磁盘是否组成了磁盘阵列,它的IO响应时间应该都是一样的。 从前面的计算中我们可以看到如果IO响应时间在 10ms左右的话是很正常的,但是当 IO响应时间比这个值超出太多的时候,你就要开始注意了,很可能就意味着此时你的磁盘系统已经成为了一个瓶颈。IOPS综合上面两个部分的讨论我们来估算一下阵列下的磁盘总体 在这里我们先假设组成阵列的单个磁盘的随机读写的 IOP为读写缓存命中率都为 组成阵列的磁盘个数为 。因为不管是那种阵列,磁盘的读取性能都是所有磁盘之和, 所以可以得出下面读取精品文档交流精品文档交流read IOPS = disk_IOPS/(1-read_cache_hit_ratio)*disk_num 0%)*4 = 622而写入性能就完全不一样了,根据上面的讨论我们可以得出下面结论:RAID0:1IOrequest=>need1actualIOondiskRAID1:1IOrequest=>need2actualIOondiskRAID5:1IOrequest=>need4actualIOondiskRAID6:1IOrequest=>need6actualIOondisk由此我们也可以计算出写入 IOPS估算公式:RAID0 write IOPS ure_IO_num =140/(1-10%)*4/1 = 622RAID1 write IOPS =disk_IOPS/(1-write_cache_hit_ratio)*disk_num/acture_IO_num =140/(1-10%)*4/2 = 311RAID5 write IOPS ure_IO_num =140/(1-10%)*4/4 = 155RAID6 write IOPS ure_IO_num =140/(1-10%)*4/6 = 103实际上从通过上面的计算方法我们还可以估算当给定一个要求的 IOPS的情况下估计下使用各个阵列级别所需要的磁盘的数量。 当然我们上面的计算方法只是一个估算,我们忽略很多其他的因素, 得出的只是一个大概的数值, 不过在际的应用还是有一定的参考作用的。本篇最后附送一个计算磁盘系统 IOPS的网站――’sk&kcalculator 这个网站提供的计算公式还考虑了诸如阵列条带大小以及主机方面的因素,很有参考价值,至于怎么选择合适的条带大小,请参考【延伸阅读】部分。传输速度(TransferRate)/ 吞吐率(Throughput)实际上估算除了随机读写的 IOPS也就知道了随机读写的吞吐率。对于顺序读写的呢,还是跟前一篇所讲的一样,主要受限于磁盘的限制,不能再拿 IOPS来量了。random_throughtput = random_IOPS * IO_chunk_size能部室由企管部统一考核)。不符合卫生标准的,超市内每处扣0.5分,超市外每处扣1分。卫生管理制度1 总则1.1 为了加强公司的环境卫生管理,创造一个整洁、文明、温馨的购物、办公环境,根据《公共场所卫生管理条例》的要求,特制定本制度。1.2 集团公司的卫生管理部门设在企管部,并负责将集团公司的卫生区域详细划分到各部室,各分公司所辖区域卫生由分公司客服部负责划分,确保无遗漏。2 卫生标准2.1 室内卫生标准2.1.1 地面、墙面:无灰尘、无纸屑、无痰迹、无泡泡糖等粘合物、无积水,墙角无灰吊、无蜘蛛网。2.1.2 门、窗、玻璃、镜子、柱子、电梯、楼梯、灯具等,做到明亮、无灰尘、无污迹、无粘合物,特别是玻璃,要求两面明亮。2.1.3 柜台、货架:清洁干净,货架、柜台底层及周围无乱堆乱放现象、无灰尘、无粘合物,货架顶部、背部和底部干净,不存放杂物和私人物品。2.1.4 购物车(筐)、直接接触食品的售货工具(包括刀、叉等):做到内外洁净,无污垢和粘合物等。购物车(筐)要求每天营业前简单清理,周五全面清理消毒;售货工具要求每天消毒,并做好记录。2.1.5 商品及包装:商品及外包装清洁无灰尘(外包装破损的或破旧的不得陈列)。2.1.6 收款台、服务台、办公橱、存包柜:保持清洁、无灰尘,台面和侧面无灰尘、无灰吊和蜘蛛网。桌面上不得乱贴、乱画、乱堆放物品,用具摆放有序且干净,除当班的购物小票收款联外,其它单据不得存放在桌面上。2.1.7 垃圾桶:桶内外干净,要求营业时间随时清理,不得溢出,每天下班前彻底清理,不得留有垃圾过夜。2.1.8 窗帘:定期进行清理,要求干净、无污渍。2.1.9 吊饰:屋顶的吊饰要求无灰尘、无蜘蛛网,短期内不适用的吊饰及时清理彻底。2.1.10 内、外仓库:半年彻底清理一次,无垃圾、无积尘、无蜘蛛网等。2.1.11 室内其他附属物及工作用具均以整洁为准,要求无灰尘、无粘合物等污垢。2.2 室外卫生标准Windows性能计数器-- 磁盘性能分析 DiskPhysicalDisk :单次IO大小Avg.DiskBytes/ReadAvg.DiskBytes/WriteIO响应时间Avg.Disksec/Read 磁盘每次读取需要的时间,一般不超过一般不要超过11~15ms。Avg.Disksec/Write 一般小于每秒读/写的IO数)理论情况下,磁盘的随机读计数为 、 顺序读计数为 实际测试值与理论值对比,从而判断磁盘是否为瓶颈DiskReads/secDiskWrites/secDiskTransfers/secIO吞吐率(磁盘每秒读 /写字节数)DiskBytes/secDiskReadBytes/secDiskWriteBytes/sec磁盘队列长度Avg.DiskQueueLength :磁盘平均队列长度不应超过 2,即:队列长度/磁盘数磁盘有两个重要的参数: Seektime、Rotational latency 。正常的I/O计数为:①1000/(Seektime+Rotationallatency)*0.75,在此范围内属正常。当达到%的I/O计数以上时则基本认为已经存在I/O瓶颈。理论、顺序读计数为。对于数据文件而言是随机读写,日志文件是顺序读写。因此,数据文件建议存放于RAID5件存放于RAID10或RAID1中。附:00IOPS00IOPS0:0IOPS下面假设在有 4块硬盘的RAID5中观察到的 PhysicalDisk 性能对象的部值:Avg.DiskQueueLength12 队列长度Avg.DiskSec/Read.035 读数据所用时间 msAvg.DiskSec/Write.045 写数据所用时间 DiskReads/sec320 每秒读数据量DiskWrites/sec100 每秒写数据量Avg.DiskQueueLength ,12/4=3,每块磁盘的平均队列建议不超过 2Avg.DiskSec/Read 一般不要超过 。Avg.DiskSec/Write 一般建议小于 。从上面的结果,我们看到磁盘本身的 I/O 能力是满足我们的要求的, 原因是因有大量的请求才导致队列等待, 这很可能是因为你的 语句导致大量的表扫描所致。在进行优化后,如果还是不能达到要求, 下面的公式可以帮助你计算使用几块硬盘可以满足这样的并发要求 :Raid0--I/Osperdisk=(reads+writes)/numberofdisksRaid1--I/Osperdisk=[reads+(2*writes)]/2Raid5--I/Osperdisk=[reads+(4*writes)]/numberofdisksRaid10--I/Osperdisk=[reads+(2*writes)]/numberofdisks我们得到的结果是: (320+400)/4=180,这时你可以根据公式①来得到磁盘的正常I/O值。假设现在正常 I/O计数为为了达到这个结果: 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)与连续访问 Access)随机访问指的是本次 IO所给出的扇区地址和上次 IO给出扇区地址相差比较大这样的话磁头在两次 IO操作之间需要作比较大的移动动作才能重新开始读 /写数据。相反的,如果当次 IO给出的扇区地址与上次 IO结束的扇区地址一致或者是接近的话,那磁头就能很快的开始这次 IO操作这样的多个 IO操作称为连访问。因此尽管相邻的两次 IO操作在同一时刻发出,但如果它们的请求的扇区地址相差很大的话也只能称为随机访问,而非连续访问。顺序 IO模式(QueueMode)/并发 IO模式(BurstMode)磁盘控制器可能会一次对磁盘组发出一连串的 IO命令,如果磁盘组一次只能执行一个IO命令时称为顺序 IO;当磁盘组能同时执行多个 IO命令时,称为并IO。并发IO只能发生在由多个磁盘组成的磁盘组上,单块磁盘只能一次处理一个IO命令。单个 IO的大小(IOChunkSize)熟悉数据库的人都会有这么一个概念,那就是数据库存储有个基本的块大小(BlockSize) ,不管是SQLServer还是Oracle,默认的块大小都是 就是数据库每次读写都是以 8k为单位的那么对于数据库应用发出的固定 8k大小的单次读写到了写磁盘这个层面会是怎么样的呢,就是对于读写磁盘来说单个 IO操作操作数据的大小是多少呢, 是不是也是一个固定的值?答案是不确定。 首先操作系统为了提高 IO的性能而引入了文件系统缓存 (FileSystemCache) ,系统会根据请求数据的情况将多个来自 IO的请求先放在缓存里面,然后再一次性的提交给磁盘,也就是说对于数据库发出的多个 8K数据块的读操作有可能放在一个磁盘读 IO里就处理了。还有对于有些存储系统也是提供了缓存 的接收到操作系统的 IO请求之后也是会将多个操作系统的 IO请求合并成一个来处理不管是操作系统层面的缓存还是磁盘控制器层面的缓存, 目的都只有一个提高数据读写的效率。因此每次单独的 IO操作大小都是不一样的,它主要取决于系统对于数据读写效率的判断。当一次IO操作大小比较小的时候我们成为小的IO操作,比如说8K这样的;当一次IO操作的数据量比较的的时候称为大IO操作,比如说甚至更大。在我们说到块大小( BlockSize)的时候通常我们会接触到多个类似的概念,像我们上面提到的那个在数据库里面的数据最小的管理单位, Oralce称之为块(Block) ,大小一般为 SQLServer称之为页(Page),一般大小也为 8k。在文件系统里面我们也能碰到一个文件系统的块, 在现在很多的 Linux 系统中都是通过 /usr/bin/time -v 可以看到),它的作用其实跟数据库里面的块 /是一样的,都是为了方便数据的管理。但是说到单次 IO的大小,跟这些块的大小都是没有直接关系的,在英文里单次 IO大小通常被称为是 IOChunkSize,不会说成是 IOBlockSize 的。IOPS(IOperSecond)系统每秒所执行 IO操作的次数,是一个重要的用来衡量系统 IO能的一个参数。对于单个磁盘组成的 IO系统来说,计算它的 不是一件很难的事情,只要我们知道了系统完成一次 IO所需要的时间的话我们就能推算出系统IOPS来。现在我们就来推算一下磁盘的 假设磁盘的转速(Rotational Speed)为平均寻道时间为 最大传输速率为 (这里将读写速度视为一样,实际会差别比较大)。对于磁盘来说一个完整的 IO操作是这样进行的:当控制器对磁盘发出一个 IO操作命令的时候,磁盘的驱动臂 (ActuatorArm) 带读写磁头(Head)离开着陆区(LandingZone,位于内圈没有数据的区域 ),移动到要操作的初始数据块所在的磁道(Track) 的正上方,这个过程被称为寻址(Seeking)对应消耗的时间被称为寻址时间(SeekTime)但是找到对应磁道还不能马上读取数据, 这时候磁头要等到磁盘盘片(Platter) 旋转到初始数据块所在的扇区 (Sector) 落在读写磁头正上方的之后才能开始读取数据,在这个等待盘片旋转到可操作扇区的过程中消耗的时间称为旋转延时(RotationalDelay) ;接下来就随着盘片的旋转,磁头不断的读/写相应的数据块,直到完成这次 IO所需要操作的全部数据,这个过程称为据传送(DataTransfer) 对应的时间称为传送时间 (TransferTime) 完成这三个步骤之后一次IO操作也就完成了。在我们看硬盘厂商的宣传单的时候我们经常能看到 3个参数分别是平均寻址间盘片旋转速度以及最大传送速度, 这三个参数就可以提供给我们计算上述三个步骤的时间。第一个寻址时间考虑到被读写的数据可能在磁盘的任意一个磁道, 既有可能磁盘的最内圈(寻址时间最短),也可能在磁盘的最外圈(寻址时间最长),所以在计算中我们只考虑平均寻址时间, 也就是磁盘参数中标明的那个平均寻址时间,这里就采用当前最多的 10krmp硬盘的。第二个旋转延时和寻址一样,当磁头定位到磁道之后有可能正好在要读写扇区之上,这时候是不需要额外额延时就可以立刻读写到数据, 但是最坏的情况确要磁盘旋转整整一圈之后磁头才能读取到数据, 所以这里我们也考虑的是平均旋转延时,对于 10krpm的磁盘就是(60s/15k)*(1/2)=2ms 。第三个传送时间磁盘参数提供我们的最大的传输速度, 当然要达到这种速度很有难度的,但是这个速度却是磁盘纯读写磁盘的速度,因此只要给定了单次IO的大小,我们就知道磁盘需要花费多少时间在数据传送上,这个时间就是IOChunkSize/MaxTransferRate 。现在我们就可以得出这样的计算 单次IO时间的公式:IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO Size/Transfer Rate于是我们可以这样计算出 IOPSIOPS = 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.18k (1/7.2 ms = 139 IOPS)5ms + (60sec/15000RPM/2) + 8K/40MB = 5 + 2 + 0.2 =7.216K (1/7.4 ms = 135 IOPS)+16K/40MB=5+2+16K/40MB=5+2+0.4=+32K/40MB=5+2+0.8=+64K/40MB=5+2+1.6=7.432K (1/7.8 ms = 128 IOPS)5ms + (60sec/15000RPM/2)7.864K (1/8.6 ms = 116 IOPS)5ms + (60sec/15000RPM/2)8.6从上面的数据可以看出, 当单次IO越小的时候,单次 IO所耗费的时间也越少相应的IOPS也就越大。上面我们的数据都是在一个比较理想的假设下得出来的, 这里的理想的情况就是磁盘要花费平均大小的寻址时间和平均的旋转延时, 这个假设其实是比较符合我们实际情况中的随机读写,在随机读写中,每次 IO操作的寻址时间和旋转延时都不能忽略不计,有了这两个时间的存在也就限制了 IOPS的大小。现在我们考虑一种相对极端的顺序读写操作, 比如说在读取一个很大的存储连续分布在磁盘的文件,因为文件的存储的分布是连续的,磁头在完成一个读 IO操作之后,不需要从新的寻址,也不需要旋转延时,在这种情况下我们能到一个很大的 值,如下4K(1/0.1ms=10000 IOPS)0ms+0ms+ 4K/40MB =0.18k(1/0.2ms=5000 IOPS)0ms+0ms+ 8K/40MB =0.216K(1/0.4ms =2500 IOPS)0ms+ 0ms+ 16K/40MB=0.432K(1/0.8ms =1250 IOPS)0ms+ 0ms+ 32K/40MB=0.864K(1/1.6ms =625 IOPS)0ms+ 0ms+ 64K/40MB=1.6相比第一组数据来说差距是非常的大的,因此当我们要用 IOPS来衡量一个 IO系统的系能的时候我们一定要说清楚是在什么情况的 也就是要说明读写的方式以及单次 IO的大小,当然在实际当中,特别是在的系统的,随机小IO的读写是最有说服力的。传输速度(TransferRate)/ 吞吐率(Throughput)现在我们要说的传输速度(另一个常见的说法是吞吐率) 不是磁盘上所表明的大传输速度或者说理想传输速度, 而是磁盘在实际使用的时候从磁盘系统总线上流过的数据量。有了 IOPS数据之后我们是很容易就能计算出对应的传输速度来的Transfer Rate = IOPS * IO Chunk Size8K:139* 8K=1112K/40M=2.71%16K:135* 16K=2160K/40M=5.27%32K:116* 32K8K:139* 8K=1112K/40M=2.71%16K:135* 16K=2160K/40M=5.27%32K:116* 32K=3712K/40M=9.06%可以看出实际上的传输速度是很小的,对总线的利用率也是非常的小。这里一定要明确一个概念,那就是尽管上面我们使用 IOPS来计算传输速度,但是实际上传输速度和 IOPS是没有直接关系,在没有缓存的情况下它们共同的决定因素都是对磁盘系统的访问方式以及单个 IO的大小。对磁盘进行随机访问时候我们可以利用 IOPS来衡量一个磁盘系统的性能,此时的传输速度不会太大;但是当对磁盘进行连续访问时,此时的 IOPS已经没有了参考的价值,这个时候限制实际传输速度却是磁盘的最大传输速度。因此在实际的应用当中,只会用IOPS 来衡量小IO的随机读写的性能,而当要衡量大 IO连续读写的性能的时就要采用传输速度而不能是 IOPS了。IO响应时间(IOResponseTime)最后来关注一下能直接描述 IO性能的IO响应时间。IO响应时间也被称为 IO时(IOLatency) ,IO响应时间就是从操作系统内核发出的一个读或者写的 IO命令到操作系统内核接收到 IO回应的时间,注意不要和单个 IO时间混淆了,单个IO时间仅仅指的是 IO操作在磁盘内部处理的时间,而 IO响应时间还要包括 IO操作在IO等待队列中所花费的等待时间。计算IO操作在等待队列里面消耗的时间有一个衍生于利托氏定理(Little’sLaw)的排队模型M/M/1模型可以遵循,由于排队模型算法比较复杂,到现在还没有搞太明白(如果有谁对M/M/1模型比较精通的话欢迎给予指导这里就罗列一下最后的结果,还是那上面计算的IOPS数据来说:8K IO Chunk Size (135 IOPS, 7.2 135 => 240.0 ms105 => 29.5 ms75 => 15.7 ms45 => 10.6 ms64KIOChunkSize(116IOPS,8.6ms)135 => 没响应了⋯⋯105 => 88.6 ms75 => 24.6 ms45 => 14.6 ms从上面的数据可以看出,随着系统实际 IOPS越接近理论的最大值, IO的响应间会成非线性的增长,越是接近最大值,响应时间就变得越大, 而且会比预期超出很多。一般来说在实际的应用中有一个 的指导值,也就是说在 IO读写的队列中,当队列大小小于最大 IOPS的的时候,IO的响应时间增加会很小,相对来说让人比较能接受的,一旦超过 响应时间就会戏剧性的暴增,所以当一个系统的 IO压力超出最大可承受压力的 的时候就是必须要考虑调整或升级了。另外补充说一下这个的指导值也适用于过的,一旦超过精品文档交流精品文档交流从上一篇文章的计算中我们可以看到一个 15k转速的磁盘在随机读写访问的情况下IOPS竟然只有140左右,但在实际应用中我们却能看到很多标有 甚至更高的存储系统,有这么大 IOPS的存储系统怎么来的呢?这就要归结于各种存储技术的使用了,在这些存储技术中使用最广的就是高速缓存 (Cache)和磁盘冗余阵列(RAID)了,本文就将探讨缓存和磁盘阵列提高存储 IO性能的方法。高速缓存(Cache)在当下的各种存储产品中,按照速度从快到慢应该就是内存 闪存磁盘磁带了然而速度越快也就意味着价格越高, 闪存虽然说是发展势头很好, 但目前来说却还是因为价格问题无法普及, 因此现在还是一个磁盘作霸王的时代。 与和内存速度相比,磁盘的速度无疑是计算机系统中最大的瓶颈了, 所以在必须使用磁盘而又想提高性能的情况下,人们想出了在磁盘中嵌入一块高速的内存 用来保存经常访问的数据从而提高读写效率的方法来折中的解决, 这块嵌入的内存就被称为高速缓存。说到缓存,这东西应用现在已经是无处不在, 从处于上层的应用,到操作系统层再到磁盘控制器,还有内部,单个磁盘的内部也都存在缓存, 所有这些缓存存在的目的都是相同的,就是提高系统执行的效率。当然在这里我们只关心跟IO性能相关的缓存,与 IO性能直接相关的几个缓存分别是 文件系统缓存(FileSystemCache) 、磁盘控制器缓存(DiskControllerCache) 和磁盘缓存(DiskCache,也称为DiskBuffer) ,不过当在计算一个磁盘系统性能的时候文件系统缓存也是不会考虑在内的, 因此我们重点考察的就是磁盘控制器缓存和磁缓存。不管是控制器缓存还是磁盘缓存,他们所起的作用主要是分为三部分: 缓存数据预读(Read-ahead)和回写(Write-back) 。缓存数据首先是系统读取过的数据会被缓存在高速缓存中, 这样下次再次需要读取相同的数据的时候就不用在访问磁盘, 直接从缓存中取数据就可以了。 当然使用过的据也不可能在缓存中永久保留的,缓存的数据一般那是采取 算法来进行管理目的是将长时间不用的数据清除出缓存, 那些经常被访问的却能一直保留在缓存中,直到缓存被清空。预读预读是指采用预读算法在没有系统的IO请求的时候事先将数据从磁盘中读入到缓存中,然后在系统发出读IO请求的时候,就会实现去检查看看缓存里面是否存在要读取的数据,如果存在(即命中)的话就直接将结果返回,这时候的磁盘精品文档交流精品文档交流不再需要寻址、旋转等待、读取数据这一序列的操作了, 这样是能节省很多时的;如果没有命中则再发出真正的读取磁盘的命令去取所需要的数据。缓存的命中率跟缓存的大小有很大的关系, 理论上是缓存越大的话,所能缓存的数据也就越多,这样命中率也自然越高, 当然缓存不可能太大, 毕竟成本在那儿呢如果一个容量很大的存储系统配备了一个很小的读缓存的话, 这时候问题会比较大的,因为小缓存的数据量非常小, 相比整个存储系统来说比例非常低, 样随机读取(数据库系统的大多数情况) 的时候命中率也自然就很低, 这样的缓存不但不能提高效率(因为绝大部分读 IO都还要读取磁盘),反而会因为每次去匹配缓存而浪费时间。执行读IO操作是读取数据存在于缓存中的数量与全部要读取数据的比值称为缓存命中率(ReadCacheHitRadio) ,假设一个存储系统在不使用缓存的情况下机小IO读取能达到 而它的缓存能提供 的缓存命中率的话,那么际上它的IOPS可以达到150/(1-10%)=166。回写首先说一下,用于回写功能的那部分缓存被称为写缓存 (WriteCache)在一套缓存打开的存储中,操作系统所发出的一系列写 IO命令并不会被挨个的执行,这些写IO的命令会先写入缓存中,然后再一次性的将缓存中的修改推到磁盘中,这就相当于将那些相同的多个 IO合并成一个,多个连续操作的小 IO合并成一大的还有就是将多个随机的写 IO变成一组连续的写 这样就能减少磁盘寻址等操作所消耗的时间,大大的提高磁盘写入的效率。读缓存虽然对效率提高是很明显的, 但是它所带来的问题也比较严重, 因为缓存和普通内存一样,掉点以后数据会全部丢失,当操作系统发出的写 IO命令写入到缓存中后即被认为是写入成功, 而实际上数据是没有被真正写入磁盘的, 此时如果掉电,缓存中的数据就会永远的丢失了, 这个对应用来说是灾难性的, 目解决这个问题最好的方法就是给缓存配备电池了, 保证存储掉电之后缓存数据能如数保存下来。和读一样,写缓存也存在一个写缓存命中率(WriteCacheHitRadio)缓存命中情况不一样的是,尽管缓存命中,也不能将实际的IO操作免掉,只是被合并了而已。控制器缓存和磁盘缓存除了上面的作用之外还承当着其他的作用,比如磁盘缓存有保存IO命令队列的功能,单个的磁盘一次只能处理一个IO命令,但却能接收多个IO命令,这些进入到磁盘而未被处理的命令就保存在缓存中的IO队列中。RAID(RedundantArrayOfInexpensiveDisks)如果你是一位数据库管理员或者经常接触服务器,那对 RAID应该很熟悉了,作为最廉价的存储解决方案, RAID早已在服务器存储中得到了普及。在 RAID的各个级别中,应当以和(不过已经基本走到头了,6正在崛起中,看看这里了解下原因)应用最广了。下面将就 这几种级别的 RAID展开说一下磁盘阵列对于磁盘性能的影响,当然在阅读下面的内容之前你必须对各个级别的 RAID的结构和工作原理要熟悉才行,这样才不至于满头雾水,推荐查看 wikipedia 上面的如下条目: StandardRAIDlevels ,NestedRAIDlevels 。RAID0RAID0将数据条带化(striping) 将连续的数据分散在多个磁盘上进行存取, 系发出的IO命令(不管读 IO和写IO都一样)就可以在磁盘上被并行的执行,每个磁盘单独执行自己的那一部分请求,这样的并行的 IO操作能大大的增强整个存储系统的性能。假设一个 RAID0阵列有n(n>=2)个磁盘组成,每个磁盘的随机读写的IO能力都达到 140的话,那么整个磁盘阵列的 IO能力将是 140*n。同如果在阵列总线的传输能力允许的话 RAID0的吞吐率也将是单个磁盘的 n倍。RAID1RAID1在容量上相当于是将两个磁盘合并成一个磁盘来使用了,互为镜像的两个磁盘里面保存的数据是完全一样的,因此在并行读取的时候速度将是n个磁盘速写入速度只有n/2。RAID5我们那一个有 n(n>=3)个磁盘的 阵列来看,首先看看 RAID5阵列的读 RAID5是支持并行 IO的,而磁盘上的数据呈条带状的分布在所有的磁盘上,因此读IO的速度相当于所有磁盘速度的总和。 不过这是在没有磁盘损坏的情况下,当有一个磁盘故障的时候读取速度也是会下降的, 因为中间需要花时间来计算失磁盘上面的数据。读取数据的情况相对就要复杂的多了,先来看下 RAID5奇偶校验数据写入的过程,我们把写入的数据称为 当磁盘拿到一个写 IO的命令的时候,它首先会读取一次要写入的地址的数据块中修改之前的数据 然后再读取到当前条带中的校验信息 接下来就根据 这三组数据计算出数据写入之后的条带的奇偶校验信息 最后发出两个写 IO的命令,一个写入 另一个写奇偶校验信息 。可以看出阵列在实际操作的时候需要读、读、写、写一共 4个 IO才能完成一次写 IO操作,也就是实际上的写入速度只有所有磁盘速度总和的1/4从这点可以看出 RAID5是非常不适合用在要大批量写入数据的系统的。RAID6RAID6和很类似,差别就在于 RAID6多了一个用于校验的磁盘。就读 IO速度上来说这两个是完全一样的,都是所有磁盘 IO速度的总和。在写IO上也很是类似,不同的是 将一个命令分成了三次读、三次写一共 次IO命令才能完成,也就是 RAID6实际写入磁盘的速度是全部磁盘速度之和的1/6。可以看出从写 IO看RAID6比RAID5差别是很大的。RAID10RAID0 读写速度都很好,却没有冗余保护; 和RAID6都有同样的毛病就是写入的时候慢,读取的时候快。那么 RAID1呢?嗯,这里要说的就是 其实不管是 RAID10还是其实都是组合大于 2块磁盘时候的 当先镜像后条带时候就称为 先条带后镜像的时候称为 。从性能上看RAID01和RAID10都是一样的,都是 RAID1嘛,但是RAID10在重建故障磁盘的时候性能比 RAID01 要快。因为 其实就是所以它的性能与RAID1也就是一样的了,这里不需要再做过多的讨论。四个性能指标的变化IO响应时间(IOResponseTime)在任何时候 IO响应时间值得都是单个 IO的响应时间,因此,不管磁盘是否组成了磁盘阵列,它的IO响应时间应该都是一样的。 从前面的计算中我们可以看到如果IO响应时间在 10ms左右的话是很正常的,但是当 IO响应时间比这个值超出太多的时候,你就要开始注意了,很可能就意味着此时你的磁盘系统已经成为了一个瓶颈。IOPS综合上面两个部分的讨论我们来估算一下阵列下的磁盘总体 在这里我们先假设组成阵列的单个磁盘的随机读写的 IOP为读写缓存命中率都为 组成阵列的磁盘个数为 。因为不管是那种阵列,磁盘的读取性能都是所有磁盘之和, 所以可以得出下面读取精品文档交流精品文档交流read IOPS = disk_IOPS/(1-read_cache_hit_ratio)*disk_num 0%)*4 = 622而写入性能就完全不一样了,根据上面的讨论我们可以得出下面结论:RAID0:1IOrequest=>need1actualIOondiskRAID1:1IOrequest=>need2actualIOondiskRAID5:1IOrequest=>need4actualIOondiskRAID6:1IOrequest=>need6actualIOondisk由此我们也可以计算出写入 IOPS估算公式:RAID0 write IOPS ure_IO_num =140/(1-10%)*4/1 = 622RAID1 write IOPS =disk_IOPS/(1-write_cache_hit_ratio)*disk_num/acture_IO_num =140/(1-10%)*4/2 = 311RAID5 write IOPS ure_IO_num =140/(1-10%)*4/4 = 155RAID6 write IOPS ure_IO_num =140/(1-10%)*4/6 = 103实际上从通过上面的计算方法我们还可以估算当给定一个要求的 IOPS的情况下估计下使用各个阵列级别所需要的磁盘的数量。 当然我们上面的计算方法只是一个估算,我们忽略很多其他的因素, 得出的只是一个大概的数值, 不过在际的应用还是有一定的参考作用的。本篇最后附送一个计算磁盘系统 IOPS的网站――’sk&kcalculator 这个网站提供的计算公式还考虑了诸如阵列条带大小以及主机方面的因素,很有参考价值,至于怎么选择合适的条带大小,请参考【延伸阅读】部分。传输速度(TransferRate)/ 吞吐率(Throughput)实际上估算除了随机读写的 IOPS也就知道了随机读写的吞吐率。对于顺序读写的呢,还是跟前一篇所讲的一样,主要受限于磁盘的限制,不能再拿 IOPS来量了。random_throughtput = random_IOPS * IO_chunk_size能部室由企管部统一考核)。不符合卫生标准的,超市内每处扣0.5分,超市外每处扣1分。卫生管理制度1 总则1.1 为了加强公司的环境卫生管理,创造一个整洁、文明、温馨的购物、办公环境,根据《公共场所卫生管理条例》的要求,特制定本制度。1.2 集团公司的卫生管理部门设在企管部,并负责将集团公司的卫生区域详细划分到各部室,各分公司所辖区域卫生由分公司客服部负责划分,确保无遗漏。2 卫生标准2.1 室内卫生标准2.1.1 地面、墙面:无灰尘、无纸屑、无痰迹、无泡泡糖等粘合物、无积水,墙角无灰吊、无蜘蛛网。2.1.2 门、窗、玻璃、镜子、柱子、电梯、楼梯、灯具等,做到明亮、无灰尘、无污迹、无粘合物,特别是玻璃,要求两面明亮。2.1.3 柜台、货架:清洁干净,货架、柜台底层及周围无乱堆乱放现象、无灰尘、无粘合物,货架顶部、背部和底部干净,不存放杂物和私人物品。2.1.4 购物车(筐)、直接接触食品的售货工具(包括刀、叉等):做到内外洁净,无污垢和粘合物等。购物车(筐)要求每天营业前简单清理,周五全面清理消毒;售货工具要求每天消毒,并做好记录。2.1.5 商品及包装:商品及外包装清洁无灰尘(外包装破损的或破旧的不得陈列)。2.1.6 收款台、服务台、办公橱、存包柜:保持清洁、无灰尘,台面和侧面无灰尘、无灰吊和蜘蛛网。桌面上不得乱贴、乱画、乱堆放物品,用具摆放有序且干净,除当班的购物小票收款联外,其它单据不得存放在桌面上。2.1.7 垃圾桶:桶内外干净,要求营业时间随时清理,不得溢出,每天下班前彻底清理,不得留有垃圾过夜。2.1.8 窗帘:定期进行清理,要求干净、无污渍。2.1.9 吊饰:屋顶的吊饰要求无灰尘、无蜘蛛网,短期内不适用的吊饰及时清理彻底。2.1.10 内、外仓库:半年彻底清理一次,无垃圾、无积尘、无蜘蛛网等。2.1.11 室内其他附属物及工作用具均以整洁为准,要求无灰尘、无粘合物等污垢。Windows性能计数器-- 磁盘性能分析 DiskPhysicalDisk :单次IO大小Avg.DiskBytes/ReadAvg.DiskBytes/WriteIO响应时间Avg.Disksec/Read 磁盘每次读取需要的时间,一般不超过一般不要超过11~15ms。Avg.Disksec/Write 一般小于每秒读/写的IO数)理论情况下,磁盘的随机读计数为 、 顺序读计数为 实际测试值与理论值对比,从而判断磁盘是否为瓶颈DiskReads/secDiskWrites/secDiskTransfers/secIO吞吐率(磁盘每秒读 /写字节数)DiskBytes/secDiskReadBytes/secDiskWriteBytes/sec磁盘队列长度Avg.DiskQueueLength :磁盘平均队列长度不应超过 2,即:队列长度/磁盘数磁盘有两个重要的参数: Seektime、Rotational latency 。正常的I/O计数为:①1000/(Seektime+Rotationallatency)*0.75,在此范围内属正常。当达到%的I/O计数以上时则基本认为已经存在I/O瓶颈。理论、顺序读计数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年吴忠小型客运从业资格证考试培训试题和答案
- 技术深化、领域融合持续增长的AI市场-AI行业月度报告(2024.9)
- 2024年度城市轨道交通设备购买与维护合同
- 2024年度新型智能家居产品研发与销售合同
- 2024年度技术转让合同:彩钢房新型建材应用技术
- 2024年度房地产项目代理销售合同
- 04版标的5000万瓷砖的供应合同
- 2024年度房地产项目工程审计合同
- 2024年度版权转让合同标的权利转移与报酬支付
- 2024年度品牌授权与代理合同:品牌权益、代理区域、销售目标与分成比例
- 2024水样采集与保存方法
- 2025届高考语文一轮复习:二元思辨类作文思辨关系高阶思维
- 《中国慢性阻塞性肺疾病基层诊疗与管理指南(2024年)》解读
- HSK标准教程5下-课件-L7
- 设备故障报修维修记录单
- 学生放学高峰期校门口疏导方案
- 建筑桩基技术规范 JGJ942008
- 第三章非均相反应
- 榆林地区电厂明细
- 经开区闲置低效工业用地盘活处置工作实施方案
- 卫生院基本公共卫生服务项目工作进度表
评论
0/150
提交评论