磁盘I/O优化。

性能检测

    我们的应用程序通常都需要访问磁盘来读取数据,而磁盘I/O通常都很耗时,要判断I/O是否是一个瓶颈,有一些参数指标可以参考。
    我们可以压力测试应用程序,看系统的I/O wait指标是否正常,例如,测试机器上有4个CPU,那么理想的I/O wait参数不应该超过25%,如果超过25%,I/O很可能成为应用程序的性能瓶颈。在Linux操作系统下可以通过iostat命令查看。
    通常我们在判断I/O性能时还会看到另外一个参数,就是IOPS,即要查看应用程序需要的最低的IOPS是多少,磁盘的IOPS能不能达到要求。每个磁盘的IOPS通常在一个范围内,这和存储在磁盘上的数据块的大小和访问方式也有关,但主要是由磁盘的转速决定的,磁盘的转速越高,磁盘的IOPS也越高。
    现在为了提升磁盘I/O的性能,通常采用一种叫做RAID的技术,就是将不同的磁盘组合起来以提高I/O性能,目前有多种RAID技术,每种RAID技术对I/O性能的提升会有不同,可以用一个RAID因子来代表,磁盘的读写吞吐量可以通过iostat命令来获取,于是可以计算出一个理论的IOPS值,计算公式如下:
    (磁盘数×每块磁盘的IOPS)/(磁盘读的吞吐量+RAID因子×磁盘写的吞吐量)=IOPS

提升I/O性能

    通常提升磁盘I/O性能的方法有:

  •     增加缓存,减少磁盘访问次数。
  •     优化磁盘的管理系统,设计最优的磁盘方式策略,以及磁盘的寻址策略,这时在底层操作系统层面考虑的。
  •     设计合理的磁盘存储数据块,以及访问呢这些数据块的策略,这是在应用层面考虑的。例如,我们可以给存放的数据设计索引,通过寻址索引来加快和减少磁盘的访问量,还可以采用异步和非阻塞的方式加快磁盘的访问速度。
  •     应用合理的RAID策略提升磁盘I/O,RAID策略及说明如下表所示。
磁盘阵列 说明
RAID 0 数据被平均写到多个磁盘阵列中,写数据和读数据都是并行的,所以磁盘的IOPS可以提高一倍
RAID 1 RAID 1的主要作用是能够提高数据的安全性,他将一份数据分别复制到多个磁盘阵列中,并不能提升IOPS,但是相同的数据有多个备份。通常用于对数据安全性较高的场合中
RAID 5 这种设计方式是前两种的折中方式,他将数据平均写到所有磁盘阵列总数减一的磁盘中,往另外一个磁盘中写入这份数据的奇偶校验信息。如果其中一个磁盘损坏,可以通过其他磁盘的数据和这个数据的奇偶校验信息来恢复这份数据
RAID 0+1 如名字一样,就是根据数据的备份情况进行分组,一份数据同时写到多个备份磁盘分组中,同时多个分组也会并行读写

猜你喜欢

转载自blog.csdn.net/en_joker/article/details/81296779