《信息存储与管理(第二版):数字信息的存储、管理和保护》——2.10 基于应用程序的需求和磁盘性能的存储设计-阿里云开发者社区

开发者社区> 数据库> 正文

《信息存储与管理(第二版):数字信息的存储、管理和保护》——2.10 基于应用程序的需求和磁盘性能的存储设计

简介:

本节书摘来异步社区《信息存储与管理(第二版):数字信息的存储、管理和保护》一书中的第2章,第2.10节,作者:【新加坡】G.Somasundaram ,【美】Alok Shrivastava,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.10 基于应用程序的需求和磁盘性能的存储设计

信息存储与管理(第二版):数字信息的存储、管理和保护
应用程序的存储需求分析通常都是从确定存储容量开始的。这可以根据文件系统的大小和数量,以及应用程序将要使用的数据库部件来评估确定。应用程序的I/O大小、特点及其在工作峰值产生的I/O数量是影响磁盘性能、I/O响应时间和存储系统设计的其他因素。块大小取决于应用程序所依赖的文件系统和数据库。数据库环境中的块大小通常是由底层数据库引擎及其环境变量集所控制的。

磁盘服务时间(Ts)是衡量磁盘性能的一个关键指标。Ts-和磁盘利用率(U)决定了一个应用的I/O响应时间。正如本章前面提到的那样,总的磁盘服务时间(Ts)是寻道时间(T)、旋转延迟(L)和内部传输时间(X)的总和。

Ts = T + L + X

给定如下磁盘实例,磁盘的具体规格是这样的:

在一个随机I/O环境中,平均寻道时间为5ms。因此,T=5ms。
磁盘旋转速率为15 000rpm(250转每秒)——由此可以确定旋转延迟(L),大概是旋转一圈时间的一半,即L=(0.5/250 rps,以ms为单位)。
内部数据传输率为40MB/s,其内部传输时间(X)可以根据I/O块大小来计算。比如,如果块大小为32KB,那么X=32KB/40MB。
由此,I/O控制器服务一个大小为32KB的块所用的时间为:

Ts =5ms+(0.5/250)+32KB/40MB=7.8ms。

每秒钟最大的I/O服务次数,即IOPS为(1/Ts)=1/(7.8×10-3)=128 IOPS。

6a9bc20e877a9c81ca0ba32712a35d82a263a5bf

对不同块大小,IOPS的范围从116到140,这也意味着可以达到极高的利用率(接近100%)。如节所述,当磁盘控制器利用率升高时,应用的响应时间R也将增加。还是前面的例子,块大小为32 KB,在磁盘控制器利用率为96%时,响应时间(R)为:

R=Ts/(1-U)=7.8/(1-0.96)=195 ms

如果一个应用要求更快的响应时间,那么磁盘利用率必须维持在70%以下。同样是32 KB的块大小,磁盘利用率在70%时,响应时间急剧降低,为26 ms。然而,在磁盘利用率更低时,IOPS也会减少。依然是32 KB的块大小,利用率接近100%时,磁盘可以执行的IOPS为128。在磁盘利用率为70%的IOPS为89(128×0.7),这表明磁盘可以执行的I/O操作数是一个重要的因素。在为应用计划存储需求时,需要重点考虑这个因素。

应用程序的存储需求是要根据满足应用程序的存储容量和IOPS来确定的。如果一个应用程序需要的磁盘空间,那么当前一块磁盘就能满足这种需求。然而,如果应用程序的I/O需求很高时,性能下降,一块磁盘就无法满足高需求的I/O响应时间。

基于以上讨论,一个应用程序所需要的磁盘数(DR)可以通过如下方式计算得到:

DR = Max(DC, DI)

这里DC是满足容量需求的磁盘数量,而DI是满足IOPS需求的磁盘数量。

让我们通过一个例子来加深理解。

假设一个应用程序的容量需求为1.46TB,应用程序最高负载时的IOPS为9 000,磁盘制造商提供的磁盘容量为146GB,转速为15 000rpm,可以达到的最大IOPS为180。

在这个例子中,为了满足容量需求,需要1.46TB/146GB=10个磁盘。

而为了满足高达9 000的IOPS需求,则需要50个磁盘(9 000/180)。结果,为了满足应用程序的需求,将需要50 = Max(10, 50)个磁盘。

对响应时间敏感的那些应用,磁盘需求数还必须以单个磁盘低于70%使用率时的IOPS来计算。依然使用这个例子,单个磁盘在70%使用率时的IOPS为180×70%=126 IOPS。那么满足应用IOPS需求的磁盘数量是9 000/126=72。

因此,满足这个应用程序的需求需要Max (10, 72) = 72 块磁盘。

在上面的例子中,从容量角度看,10块磁盘就可满足需求,但是满足性能需求则需要72块磁盘。为了从性能角度优化磁盘需求,出现了许多运行在实时环境下的解决方案,例如磁盘原生命令排序(disk native command queuing)、使用闪存盘、RAID以及使用缓存(cache memory)。RAID和高速缓存将分别在第3章和第4章详细讲述。

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章