磁盘访问模式

磁盘的访问模式分为顺序访问和随机访问,拷贝大文件属于顺序访问, 数据库中访问数据更趋向于随机读。

顺序访问值的单位是 MB/s ,表示为磁盘带宽,普通硬盘在 50~ 100 MB/s,SSD(Interl S3500)有 400M~450M/s。
随机访问也可以用MB/s进行表示,但是通常使用 IOPS,普通硬盘在 100-200 IOPS(SATA 120~150, SAS 150~200),SSD 高达 50000+。

从理论上讲,15000转/分钟,最高是 15000/60 约等于 250 IOPS。HDD硬盘的转速目前已经很难提升,主要是因为转速太高无法很好的散热。硬盘厂商对硬盘的随机访问速度有一个测试值,例如,如果一个HDD对4K的块做随机访问,速度是0.8MB/s,可通过(0.8 * 1000K)/ 4K=200 得到 IOPS。但是,我们这样计算的 IOPS 值存在部分干扰因素,比如 0.8MB/s受到了cache的影响等。

磁盘分类

磁盘目前分为 HDD(机械盘)和 SSD(固态盘)。

HDD 盘片通过旋转,磁头进行定位,读取数据,常见的转速(RPM)笔记本:5400转/分钟,桌面硬盘:7200转/分钟,服务器硬盘10000转/分钟、15000转/分钟。HDD 顺序性较好,随机性较差。

SSD 是纯电设备,功耗低,由FLash Memory组成, MLC 闪存颗粒对一般企业的业务够用,目前SLC闪存颗粒价格较贵。MLC 寿命目前可以使用 5 ~ 10 年,闪存卡的寿命可以使用命令查看。SSD 其顺序性能和随机性能都要优于HDD,特别是IOPS。

提升IOPS性能手段

  • 通过RAID技术:功耗非常高,IOPS 在 2000 左右
  • 通过购买共享存储设备:稳定,价格昂贵,底层还是通过 RAID 实现。VSP G1000 的 IOPS 约 270000。
  • 直接使用 SSD:IOPS 单位以万计,具体需要看设备参数。

数据库一般使用 RAID 10。如果是 SSD 的话,可以考虑 RAID 5,RAID 10 太奢侈。如果使用 MySQL,强烈建议使用 SSD。

RAID卡有讲究

RAID卡是有缓存的,1G左右,有两种工作模式:Write Backup(开启缓存)和 Write Through(没有开启缓存),很多存储写缓存并非默认开启。

缓存面临掉电数据丢失的风险,需要 BBU (Battery Backup Unit) 来保证数据安全,现在所有 RAID 卡都带有 BBU,说白了就是电池,在断电后,将 RAID卡 内存 中的缓存的数据刷入到磁盘。

打开写缓存,RAID 卡会监测电池的容量,当电量不足的时候,会进行放电和充电(锂电池设计就是这样的,先放电再充电)(可能两周或者一个月一次),此时会切成 write through,磁盘的负载会变高,这也是以前存储性能莫名降低的原因。我们可以设置为即使在冲放电,也启用 write back 模式,毕竟在充放电的同时又发生掉电的概率还是比较低的,也可以设计成主备 BBU,当一个 BBU 充放电时,另外一个 BBU 接管工作。

RAID卡相关命令示例:

查看电量百分比
[root@test_raid ~]# megacli -AdpBbuCmd -GetBbuStatus -aALL |grep "Relative State of Charge"
Relative State of Charge: 100%

查看充电状态
[root@test_raid~]# megacli -AdpBbuCmd -GetBbuStatus -aALL |grep "Charger Status"
Charger Status: Complete

查看缓存策略
[root@test_raid ~]# megacli -LDGetProp -Cache -LALL -a0
Adapter 0-VD 0(target id: 0): Cache Policy:WriteBack, ReadAdaptive, Direct, No Write Cache ifbad BBU

SSD

SSD扇区的大小一般为4K或者8K。但是为了兼容HDD,SSD通过Flash Translation Layer (FTL)的方式转换成512B(文件系统还是按512在设计)。

SSD 存在读写速度非对称的问题,但尽管这样,跟 HDD 相比,仍然不在一个数量级上。以 INTEL SSD DC-S3500 为例子:

  • Random 4KB Reads: Up to 75,000 IOPS
  • Random 4KB Writes: Up to 11,500 IOPS
  • Random 8KB Reads: Up to 47,500 IOPS
  • Random 8KB Writes: Up to 5,500 IOPS

对比发现4K性能要优于8K的性能,几乎是2倍的差距,当然16K就更明显,所以当使用SSD时,建议数据库页大小设置成4K或者是8K(innodb_page_size=8K)。

SSD 品牌推荐:Intel、FusionIO、宝存。在选择 SSD 时,要注意如下事项:

  • PCIE or SATA/SAS?
  • SATA/SAS益于安装与升级,与PCIE的性能差距逐渐缩小,PCIE的性能很少有应用可以完全使用
  • 优先选择SATA/SAS接口的SSD,不是很建议使用PCI-E的Flash卡(PCI-E插槽的SSD),性能过剩,安装比较麻烦
  • 注意 Endurance Rating的值,表示该SSD的寿命是多少,比如450TBW,表示这个SSD可以反复写入的数据总量是450T(包括添加、删除和更新)
  • SSD需要经过严格的压力测试(一周时间来全量写),确保性能平稳

SSD 修改数据需要先擦除再写入,擦除数据需要整个区域(128K or 256K)一起擦除,如果 SSD 的控制器做得不好,就会出现运行一段时间后,性能出现抖动和下降的现象,所以,SSD 需要经过严格的至少一周的全量写入测试来评估其稳定性。关于测试工具,后面会讲到。

-- By 许望(RHCA、OCM、VCP)
最后修改:2019 年 11 月 08 日 08 : 40 AM
如果觉得我的文章对你有用,请随意赞赏