存储的几个主要指标是IOPS、带宽与响应时间。
IOPS:
指的是系统在单位时间内能处理的最大IO频度,一般是指单位时间内能完成的随机小IO个数。
带宽(throuput):
有的时候也较吞吐量,指的是单位时间按内最大的IO流量。往往是采用大的IO块、大的带宽获得的最大流量。
这IOPS和带宽即相互独立有相互关联。一般来说,当涉及更多的频繁读写时(OLTP),更多的考虑IOPS与响应时间;而一些大量的顺序文件访问,例如数据仓库应用(OLAP),流媒体,更多的考虑带宽指标。
响应时间:
单IO的响应时间指的是一个IO请求从开始到结束的时间,它往往与cache大小以及命中率有很大关系。
决定IOPS的因素有如下几个:
磁盘个数:首先看磁盘个数,这个是决定存储IOPS的最关键因素,因为每个磁盘的最大IOPS个数是有限制的。
目前的情况是:FC硬盘(光通道硬盘)速率>SATA硬盘速率;15K转速FC硬盘>10K转速硬盘
举个例子:
如果一个磁盘阵列有120块 15K rpm的光纤硬盘,他能支撑的磁盘IOPS为 120×150=18000,基本达到硬件限制的理论值。
cache命中率:cache 如果命中,一个查询可能只需要1-2ms就可以返回,而磁盘读取,就可能需要5-10ms;如果读操作特别多,可能需要更高。cache读操作速度是磁盘读操作速度的5倍以上。 一般情况下,cache越大,命中率也越高,当然命中率也和应用,数据库设计也有关。好的应用设计可以大大的提高cache命中率。因为读 cache 采用类似LRU的算法设计,对于比较典型的OLTP环境是比较合适的,而在数据仓库应用(OLAP)或者类似文件流的系统中,因为读cache很不容易命中,所以作用不是很大。
阵列的算法:阵列算法有cache算法、寻道算法、预读算法等,它们对IOPS与cache命中率也有直接间接的影响,阵列不一样,算法也不一样。
cache命中:如果数据在内存中(磁盘阵列的内存),则可以直接从内存中获得,这个称为cache命中。
关于cache,有几个要注意的地方:
一般在生产系统中都要打开cache mirror这个功能,如果一个节点失败,另一个节点的 cache mirror镜像的存在能保证不丢失数据,把cache 数据写回磁盘。
cache读和cache 写:对于raid 5 格式的磁盘阵列来说,cache尤其重要,数据可以先写到cache中,再由磁盘阵列写回到硬盘上去。否则,直接写到磁盘阵列的硬盘上,由于raid 5还要读写额外的校验信息,比 raid 10 需要更多的io。
关于RAID:
建议对OLTP数据库,采用RAID 10而不是 RAID5.原因前面也说了,因为一个读写,同样的情况下,RAID5 需要的 io比 RAID10 更多.
存储的第二个重要指标是带宽,主要取决于硬盘的个数、光纤通道的数量和带宽、阵列的构架。与IOPS一样,每个硬盘也有自己最大能支持的流量大小,硬盘类型与最大流量的关系是15kRPM光纤硬盘>10KRPM光纤硬盘>SATA光纤硬盘。比如说,假设一个阵列有120块,15K rpm 的光纤硬盘,那么硬盘上最大可以支撑的流量是
120*13=1650MB/s。除了硬盘,就要考虑光纤通道了,如数据仓库环境(OLAP)中,如果1块2Gb的光纤卡,所能支持的最大流量是 2Gb/8=250MB/s的实际流量。需要4块才能达到 1GB/s的实际流量,所以数据仓库可以考虑用 4Gb的光纤卡。
最后,阵列的构架因每个阵列的不同而不同,它们也都存在内部带宽,(类似PC的总线),不过一般情况下,内部带宽都设计的很充足,不是瓶颈所在。
存储的第三个重要指标是响应时间,除了IOPS与吞吐量,另一个重要指标就是 单IO的响应时间,单IO的响应时间与IOPS的当前值、吞吐量大小以及cache 命中率都有很大的关系。经验值表示,一个IO的响应时间在20ms以内,应用基本可以正常工作,作为一个核心的高可用OLTP环境,最佳的单IO响应时间建议在10ms以内。
总结存储的选型:
如果应用是一个大型的交易系统,也就是典型的OLTP环境,其中以事务与小的查询语句多,基本是离散读与离散写,首先考虑IOPS因素,并配置合适的硬盘个数和Cache 大小。
如果应用数数据仓库环境,或者是典型的OLAP环境,其中主要运行大型的SQL语句,需要大吞吐量,读写规则基本上是连续读和连续写,则需要考虑存储系统带宽与 存储大的光纤通道带宽之和,并配置适当的硬盘个数,这与CACHE大小关系不大。
转载于:https://blog.51cto.com/onlyzq/530687