简介
我们都听说过RAID,也经常作为SQL DBA、开发人员或构架师在工作中讨论RAID。但是,其实我们很多人都对RAID的原理,等级,以及RAID是如何影响SQL Server性能并不甚了解。
本篇文章就是为了补上这一课。
磁盘构架
今天的磁盘,和70年代45rpm(转/分钟)的唱片机很像(你还能记得吗?),仅仅是一个有着轴(磁道)旋转的媒体(面)并将数据存入称之为扇区的磁盘段。
就像唱片机那样,磁盘驱动器拥有一个摆臂来控制针(在这里可以称之为”磁头”)来访问数据。但对于磁盘来说,并不像唱片机那样只读,而是既可以读又可以写。
为了从特定的扇区读或者写数据,磁盘必须进行旋转然后摆臂移动使得磁头移动到垂直于指定扇区的正上方以访问数据。
这个过程就是基本的输入/输出操作的过程(I/O)。
IOPS
IOPS这个术语也是被经常拿出来装X的,但同样,对这个术语真正理解的人并不多。
很多人都明白IOPS是Input Output Operations per Second的缩写,但是将这个定义转换为实际的概念对于某些人就有点难了。
对IOPS基本的理解是对满足特定输入输出请求的平均时间的一种衡量。
这里重点需要知道这个度量标准是基于读取0字节的文件,这仅仅是为了统计和标准化的目的因为一个磁盘扇区大小并不同。
物理磁盘的限制
磁盘会有一些物理限制会限制磁盘能达到的IOP级别。这个限制是磁道寻址时间(seek time)和旋转延迟(rotational latency)。
磁道寻址时间是为了使得磁头可以移动到所要读的扇区,移动摆臂所花费的平均时间。
旋转延迟是为了使磁头读取盘面特定位置旋转磁盘所话费的时间(通常为毫秒级)。
单位IOP所花的时间公式如下:
单位IOP时间=磁道寻址时间+旋转延迟
所以,通过这个公式我们就可以轻松计算给定磁盘的最大IOPS。
而每秒的IOPS数字也是我们最感兴趣的,公式如下:
1秒/磁道寻址时间+旋转延迟。
我们来看如下例子:
HP 300GB 15k SAS drive(200刀) | |
转速 | 15000 |
平均磁道寻址时间 | 2.9ms |
平均旋转延迟 | 1.83ms |
我们可以用公式计算IOPS了:
IOPS = 1/(2.9ms + 1.83ms)
= 1/(4.73ms)
= 1/(0.00473)
= 211 IOPS
我们可以看到,这个磁盘的IOPS为211(并不是很惨)。
假如我们想要节省更多的钱,我们再来看一个磁盘的例子以及和上面磁盘的区别:
HP 300GB 7200 SATA drive(100刀) | |
转速 | 7200 |
平均磁道寻址时间 | 10ms |
平均旋转延迟 | 2.1ms |