SQL数据库管理—IO存储

SQL数据库管理—IO存储

 

 

一  磁盘

 磁盘基本参数

1.1 容量:

容量指标还包括硬盘的单碟容量,所谓单碟容量是指硬盘单片盘片的容量,单碟容量越大,单位成本越低,平均访问时间也越短。们买硬盘的时候说是500G的,但实际容量都比500G要小的。因为厂家是按1MB=1000KB来换算的,所以我们买新硬盘,比买时候实际用量要小点的。

1.2 转速(Rotational Speed 或Spindle speed),

是硬盘内电机主轴的旋转速度,也就是硬盘盘片在一分钟内所能完成的最大转数。转速的快慢是标示硬盘档次的重要参数之一,它是决定硬盘内部传输率的关键因素之一,在很大程度上直接影响到硬盘的速度。硬盘的转速越快,硬盘寻找文件的速度也就越快,相对的硬盘的传输速度也就得到了提高。硬盘转速以每分钟多少转来表示,单位表示为RPM,RPM是Revolutions Per minute的缩写,是转/每分钟。RPM值越大,内部传输率就越快,访问时间就越短,硬盘的整体性能也就越好。

1.3传输速率

传输速率(Data Transfer Rate)硬盘的数据传输率是指硬盘读写数据的速度,单位为兆字节每秒(MB/s)。硬盘数据传输率又包括了内部数据传输率和外部数据传输率。

内部传输率(Internal Transfer Rate) 也称为持续传输率(Sustained Transfer Rate),它反映了硬盘缓冲区未用时的性能。内部传输率主要依赖于硬盘的旋转速度。

外部传输率(External Transfer Rate)也称为突发数据传输率(Burst Data Transfer Rate)或接口传输率,它标称的是系统总线与硬盘缓冲区之间的数据传输率,外部数据传输率与硬盘接口类型和硬盘缓存的大小有关。

总结:内部数据传输率是传输速率的瓶颈。目前购买的硬盘一般没有数据,需要测试。

1.4平均寻道时间(Averageseektime)

平均寻道时间是指MO磁光盘机在接收到系统指令后,磁头从开始移动到移动到数据所在磁道所需要的平均时间,它是指计算机在发出一个寻址命令,到相应目标数据被找到所需时间,单位为毫秒(ms)。

一般磁盘转速越高,平均寻道时间越短。

目前10K 最低为5ms,平均为4ms.

目前15K 最低为4ms,平均为3.5ms.

1.5平均旋转延迟

通过盘片的旋转,使得要读取的扇区转到读写头的下方,这段时间称为旋转延迟时间(rotational latency time)。

7200(转 /每分钟)的硬盘,每旋转一周所需时间为60×1000÷7200=8.33毫秒,则平均旋转延迟时间为8.33÷2=4.17毫秒(平均情况下,需要旋 转半圈)。

1000(转 /每分钟)的硬盘,每旋转一周所需时间为60×1000÷10000=6毫秒,则平均旋转延迟时间为6÷2=2毫秒(平均情况下,需要旋 转半圈)。

 

 

1.6 硬盘接口

硬盘与主机系统间的连接部件,作用是在硬盘缓存和主机内存之间传输数据。不同的硬盘接口决定着硬盘与计算机之间的连接速度,在整个系统中,硬盘接口的优劣直接影响着程序运行快慢和系统性能好坏。

 

 

 

1.7  总结

从上面的指标来看、其实最重要的、或者说、我们最关心的应该只有两个:寻道时间;旋转延迟。但是这两个参数,严重依靠转速,所以数据库硬盘转速最重要。

二  IOPS 与Throughput

2.1 概述

以MB/sec为单位的吞吐量用于衡量1秒内能从存储传输多少字节。OLAP,也叫联机分析处理(Online Analytical Processing)系统,有的时候也叫DSS决策支持系统,就是我们说的数据仓库。OLAP主要看Throughput

 

  以IO/sec为IOPS单位的吞吐量表示磁盘每秒可执行多少IO。 OLTP联机事务处理(Online Transaction Processing),OLTP主要看IOPS。

 

以MB/sec 与IOPS那个对数据库性能有更大影响那,执行随机读写的OLTP数据库主要是IOPS,对于大量顺序读取的OLAP分析数据库主要为MB/sec。

 

IOPS和Throughput吞吐量两个参数是衡量存储性能的主要指标。IOPS表示存储每秒传输IO的数量,Throughput吞吐量则表示每秒数据的传输总量。两者在不同的情况下都能表示存储的性能状况,但应用的场景不尽相同。同时,两者之间也存在着相互的联系

https://gss3.bdstatic.com/7Po3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike80%2C5%2C5%2C80%2C26/sign=580fb9fdda33c895b2739029b07a1895/d52a2834349b033b0c9e32b016ce36d3d539bd42.jpg

     总结同样的存储单次IO块越大,吞吐Throughput越好,越适合OLAP。单次IO块越小,IOPS越多,越适合OLTP。

2.2 单磁盘IOPS计算

IOPS = 1/IO Time

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

  Seek Time=平均寻道时间(Averageseektime),

  (Rotational Speed=磁盘转速

  Transfer Rate=数据传输率

  10K磁盘 不同页计算

  IO Time 8k=  5ms + (60sec/10000RPM/2) + 8K/40MB = 5 + 3+ 0.2 = 8.2ms

  IOPS8k =1/8.2ms=121  IOPS

  

IO Time16k = 5ms + (60sec/10000RPM/2) + 16K/40MB = 5 +3 + 0.4 = 8.4ms

IOPS16K=1/7.4MS=119  IOPS

  IO Time32k = 5ms + (60sec/10000RPM/2) + 32K/40MB = 5 + 3 + 0.8 = 8.8

IOPS32K= (1/8.8 ms = 123 IOPS)

IO Time64k =5ms + (60sec/10000RPM/2) + 64K/40MB = 5 + 3 + 1.6 = 9.6

IOPS64K= (1/9.6 ms = 104IOPS)

2.3 Raid的IOPS计算

浅谈RAID写惩罚(Write Penalty)与IOPS计算.

通常在讨论不同RAID保护类型的性能的时候,结论都会是RAID-1提供比较好的读写性能,RAID-5读性能不错,但是写入性能就不如RAID-1,RAID-6保护级别更高,但写性能相对更加差,RAID10是提供最好的性能和数据保护,不过成本最高等等。其实决定这些性能考虑的因素很简单,它就是RAID Write Penalty(写惩罚)。本文从原理上解释了不同RAID保护级别的写惩罚,以及通过写惩罚计算可用IOPS的方法。

2.3.1 RAID5 IOPS计算

 存储方案规划的过程中,最基本的考虑因素有两个,性能和容量。性能上的计算看可以分为IOPS和带宽需求。计算IOPS,抛开存储阵列的缓存和前端口不谈。计算后端物理磁盘的IOPS不能简单的把物理磁盘的最大IOPS相加而获得。原因是,对于不同的RAID级别,为了保证当有物理磁盘损坏的情况下可以恢复数据,数据写入的过程中都需要有一些特别的计算。比如对于RAID-5,条带上的任意磁盘上的数据改变,都会重新计算校验位。如下图所示,一个7+1的RAID-5的条带中,七个磁盘存储数据,最后一个磁盘存储校验位。

    对于一个数据的写入,我们假设在第五个磁盘上写入的数据为1111,如下图所示。那么整个RAID-5需要完成写入的过程分为以下几步:

读取原数据0110,然后与新的数据1111做XOR操作: 0110 XOR 1111 = 1001

读取原有的校验位0010

用第一步算出的数值与原校验位再做一次XOR操作: 0010 XOR 1001 = 1011

然后将1111新数据写入到数据磁盘,将第三步计算出来的新的校验位写入校验盘。


 

     由上述几个步骤可见,对于任何一次写入,在存储端,需要分别进行两次读+两次写,所以说RAID-5的Write Penalty的值是4。

 

不同RAID级别的Write Penalty: 

下表列出了各种RAID级别的Write Penalty值:

 

RAID

Write Penalty

0

1

1

2

5

4

6

6

10

2

 

 

RAID-0:直接的条带,数据每次写入对应物理磁盘上的一次写入

RAID-1和10:RAID-1 和RAID-10的写惩罚很简单理解,因为数据的镜像存在的,所以一次写入会有两次。

RAID-5:RAID-5由于要计算校验位的机制存在,需要读数据、读校验位、写数据、写校验位四个步骤,所以RAID-5的写惩罚值是4。

RAID-6:RAID-6由于有两个校验位的存在,与RAID-5相比,需要读取两次校验位和写入两次校验位,所以RAID-6的写惩罚值是6。

 

 

计算IOPS:

     根据上文的描述,在实际存储方案设计的过程中,计算实际可用IOPS的过程中必须纳入RAID的写惩罚计算。计算的公式如下

物理磁盘总的IOPS = 物理磁盘的IOPS × 磁盘数目

可用的IOPS = (物理磁盘总的IOPS × 写百分比 ÷ RAID写惩罚) + (物理磁盘总的IOPS × 读百分比)

     假设组成RAID-5的物理磁盘总共可以提供500 IOPS,使用该存储的应用程序读写比例是50%/50%,那么对于前端主机而言,实际可用的IOPS是:

(500 ×50% ÷ 4)+ ( 500 * 50%) = 312.5 IOPS

 一般情况下,如果达到总IOPS的75%的时候,已经会出现IO性能问题。

2.3.2 raid5与raid10对比

不同RAID级别的Write Penalty:

下表列出了各种RAID级别的Write Penalty值:

 

RAID

Write Penalty

0

1

1

2

5

4

6

6

10

2

 

RAID-0:直接的条带,数据每次写入对应物理磁盘上的一次写入

RAID-1和10:RAID-1 和RAID-10的写惩罚很简单理解,因为数据的镜像存在的,所以一次写入会有两次。

RAID-5:RAID-5由于要计算校验位的机制存在,需要读数据、读校验位、写数据、写校验位四个步骤,所以RAID-5的写惩罚值是4。

RAID-6:RAID-6由于有两个校验位的存在,与RAID-5相比,需要读取两次校验位和写入两次校验位,所以RAID-6的写惩罚值是6。

计算IOPS:

 

     根据上文的描述,在实际存储方案设计的过程中,计算实际可用IOPS的过程中必须纳入RAID的写惩罚计算。计算的公式如下:

 

物理磁盘总的IOPS = 物理磁盘的IOPS × 磁盘数目

 

可用的IOPS = (物理磁盘总的IOPS × 写百分比 ÷ RAID写惩罚) + (物理磁盘总的IOPS × 读百分比)

 

     假设组成RAID-5的物理磁盘总共可以提供500 IOPS,使用该存储的应用程序读写比例是50%/50%,那么对于前端主机而言,实际可用的IOPS是:

 

(500 ×50% ÷ 4)+ ( 500 * 50%) = 312.5 IOPS

 

磁盘 RAID10 / RAID5 配置下的IOPS对比

磁盘的IOPS对比

假定一个case,业务的iops是10000,读cache命中率是30%,读iops为60%,写iops为40%,磁盘个数为120,那么分别计算在raid5与raid10的情况下,每个磁盘的iops为多少。

raid5:

单块盘的iops = (10000*(1-0.3)*0.6 + 4 * (10000*0.4))/120

= (4200 + 16000)/120

= 168

这里的10000*(1-0.3)*0.6表示是读的iops,比例是0.6,除掉cache命中,实际只有4200个iops。

4 * (10000*0.4) 表示写的iops,因为每一个写,在raid5中,实际发生了4个io,所以写的iops为16000个

为了考虑raid5在写操作的时候,那2个读操作也可能发生命中,所以更精确的计算为:

单块盘的iops = (10000*(1-0.3)*0.6 + 2 * (10000*0.4)*(1-0.3) + 2 * (10000*0.4))/120

= (4200 + 5600 + 8000)/120

= 148

计算出来单个盘的iops为148个,基本达到磁盘极限

raid10

单块盘的iops = (10000*(1-0.3)*0.6 + 2 * (10000*0.4))/120

= (4200 + 8000)/120

= 102

可以看到,因为raid10对于一个写操作,只发生2次io,所以,同样的压力,同样的磁盘,每个盘的iops只有102个,还远远低于磁盘的极限iops。

 

RAID5与RAID10详细对比

为了方便对比,我这里拿同样多驱动器的磁盘来做对比,RAID5选择3D+1P的RAID方案,RAID10选择2D+2D的RAID方案。

·        

RAID5与RAID10都是当前主流的磁盘阵列方案那么他们有什么不同呢?这里,我就这两种RAID的内部运行原理来分析一下,我们在什么情况下应当适合选哪一种RAID方式。

为了方便对比,我这里拿同样多驱动器的磁盘来做对比,RAID5选择3D+1P的RAID方案,RAID10选择2D+2D的RAID方案,分别如图:


RAID5选择3D+1P的RAID方案,RAID10选择2D+2D的RAID方案

那么,我们分析如下三个过程:读,连续写,随机写,但是,在介绍这三个过程之前,我需要介绍一个特别重要的概念:cache。

cache技术最近几年,在磁盘存储技术上,发展的非常迅速,作为高端存储,cache已经是整个存储的核心所在,就是中低端存储,也有很大的cache存在,包括最简单的RAID卡,一般都包含有几十,甚至几百兆的RAID cache。

cache的主要作用是什么呢?体现在读与写两个不同的方面,如果作为写,一般存储阵列只要求写到cache就算完成了写操作,所以,阵列的写是非常快速的,在写cache的数据积累到一定程度,阵列才把数据刷到磁盘,可以实现批量的写入,至于cache数据的保护,一般都依赖于镜相与电池(或者是UPS)。

cache的读一样不可忽视,因为如果读能在cache中命中的话,将减少磁盘的寻道,因为磁盘从寻道开始到找到数据,一般都在6ms以上,而这个时间,对于那些密集型io的应用可能不是太理想。但是,如果cache能命中,一般响应时间则可以在1ms以内。

不要迷信存储厂商的iops(每秒的io数)数据,他们可能全部在cache命中的基础上做到的,但是实际上,你的cache命中率可能只有10%。

介绍完cache,我们就可以解释RAID5与RAID10在不同的模式下,工作效率问题了,那么我们来分别分析以上三个问题。

1、读操作

因为RAID5与RAID10的磁盘都可以提供服务,所以,在读上面他们基本是没有差别的,除非是读的数据能影响cache命中率,导致命中率不一样。

 

2、连续写

连续写的过程,一般表示写入连续的大批量的数据,如媒体数据流,很大的文件等等,这个写操作过程,如果有写cache存在,并且算法没有问题的话,RAID5比RAID10甚至会更好一些(这里要假定存储有一定大小足够的写cache,而且计算校验的cpu不会出现瓶颈)。因为这个时候的校验是在cache中完成,如4块盘的RAID5,可以先在内存中计算好校验,同时写入3个数据+1个校验。而RAID10只能同时写入2个数据+2个镜相。

 

连续写

如,4块盘的RAID5可以在同时间写入1、2、3到cache,并且在cache计算好校验之后,我这里假定是6(实际的校验计算并不是这样的,我这里仅仅是假设),同时把三个数据写到磁盘。而4块盘的RAID10不管cache是否存在,写的时候,都是同时写2个数据与2个镜相。

但是,我前面也说过了,写cache是可以缓存写操作的,等到一定时期再写到磁盘,但是,写操作不比读操作,这个写是迟早也要发生的,也就是说,最后落到磁盘上的写还是避免不了的,不过,如果不是连续性的强连续写,只要不达到磁盘的写极限,差别都不是太大。

3、离散写

这里可能是最难理解,但是,也是最重要的部分,数据库,如oracle 数据库大部分操作就是离散写,如每次写一个数据块的数据,如8K;联机日志虽然看起来是连续写,但是因为每次写的量不多,不保证能添满RAID5的一个条带(保证每张盘都能写入),所以很多时候也是离散写入。


离散写

我们再接上图,假定要把一个数字2变成数字4,那么对于RAID5,实际发生了4次io,先读出2与校验6,可能发生读命中然后在cache中计算新的校验写入新的数字4与新的校验8

对于RAID10,我们可以看到,同样的单个操作,最终RAID10只需要2个io,而RAID5需要4个io。

但是,这里我忽略了RAID5在那两个读操作的时候,还可能会发生读命中操作,也就是说,如果需要读取的数据已经在cache中,可能是不需要4个io的,也证明了cache对RAID5 的重要性,不仅仅是计算校验需要,而且对性能的提升由为重要。曾经测试过,在RAID5的阵列中,如果关闭写cache,RAID5的性能将差很多倍。

这里,并不是说cache对RAID10就不重要了,因为写缓冲,读命中等,都是提高速度的关键所在,不过的是,RAID10对cache的依赖性没有RAID5那么明显而已。

到这里,大家应当也大致明白了RAID5与RAID10的原理与差别了,一般来说,象小io的数据库类型操作,建议采用RAID10,而大型文件存储,数据仓库,则从空间利用的角度,可以采用RAID5。

如果是以大量的事务性的操作,在典型的OLTP 环境里,我们考虑RAID10更好些,因为OLTP 环境,IO 性能上我们考虑的主要方面。对于典型的数据仓库环境,OLAP 环境,我们选择RAID5 ,因为从空间上来说,RAID5更合适。

 

 

三  关于存储需要考虑的事项

3.1采用更多磁盘

 在RAID中,磁盘多时的运行速度总是比磁盘少时更快。例如需要4TB的卷,采用10块400G硬盘要比2块2TB硬盘获得的性能更高。在有些情况下吞吐量约等于各个磁盘吞吐量之和。假设400G和2T的转速一致,为20M/S,那么采用400G组合总吞吐量为200M/S,2TB组合为40M/S。400G组合是2TB组合5倍。

3.2 采用高速硬盘

 毫无疑问,高速硬盘比低速硬盘有更好的性能。15K的硬盘理论速度是250M/S,实际上非顺序随机读取速度实际为2-4M/S,顺序大块读取,速度也不会超过50-60M/S。

3.3 磁盘测试

  可以使用windows自带的windows system performance monitor,或者IOMeter使用三个参数就行Avg sec/Read , Avg sec/Write, Avg sec/Transfer计算器来衡量。

 数据库事务日志:不超过5MS,最好0ms。

 OLTP数据:不超过10MS。

 OLAP与报表系统:不超过25MS。

 

监控物理Disk的IO延迟

在Windows级别上对Physical Disk的IO延迟进行分析,主要依赖于Performance Monitor的计数器,衡量物理Disk的IO延迟的计数器主要有三个:

 

Avg. Disk sec/Transfer:Disk每一次读写操作所用的平均时间

Avg. Disk sec/Read:Disk每一次读操作所用的平均时间

Avg. Disk sec/Write:Disk每一次写操作所用的平均时间

avg.Disk sec/(Transfer,Read,Write),能够很好的反映Disk的IO速度,推荐的衡量Disk的IO速度的基线(baseline):

 

很快:<10ms

一般:10-20ms

有点慢:20-50ms

非常慢:>50ms

 

发布了37 篇原创文章 · 获赞 0 · 访问量 2423

猜你喜欢

转载自blog.csdn.net/syjhct/article/details/85645261
今日推荐