文章目录

    • 1、RAID卡的缓存
    • 2、RAID卡的缓存里的数据会突然丢失怎么办?
    • 3、锂电池存在性能衰减问题

1、RAID卡的缓存

服务器使用多块磁盘组成的RAID阵列的时候,一般会有一个RAID卡,这个RAID卡是带有一个缓存的,这个缓存不是直接用我们的服务器的主内存的那种模式,他是一种跟内存类似的SDRAM,当然,你大致就认为他也是基于内存来存储的吧!

然后我们可以把RAID的缓存模式设置为write back,这样的话,所有写入到磁盘阵列的数据,会按照如下流程:

  • 先会缓存在RAID卡的缓存里,
  • 后续慢慢再写入到磁盘阵列里去

这种写缓冲机制,可以大幅度提升我们的数据库磁盘写的性能。我们看下图,他说的就是这个RAID卡的缓存机制。

2、RAID卡的缓存里的数据会突然丢失怎么办?

那么现在有一个问题来了,假设突然断电了,或者是服务器自己故障关闭了,那么是不是这个RAID卡的缓存里的数据会突然丢失?那你MySQL写入磁盘的数据不就没了吗?我们看下图。

所以正是因为如此,为了解决这个问题,RAID卡一般都配置有自己独立的锂电池或者是电容,如果服务器突然掉电了,无法接通电源了,RAID卡自己是基于锂电池来供电运行的,然后他会赶紧把缓存里的数据写入到阵列中的磁盘上去,如下图所示。

3、锂电池存在性能衰减问题

但是锂电池是存在性能衰减问题的,所以一般来说锂电池都是要配置定时充放电的,也就是说每隔30天~90天(不同的锂电池厂商是不一样的),就会自动对锂电池充放电一次,这可以延长锂电池的寿命和校准电池容量。

如果你要是不这么做的话,那么可能锂电池用着用着就会发现容量不够了,可能容纳的电量在你服务器掉电之后,都没法一次性把缓存里的数据写回磁盘上去,那就会导致数据丢失了!

所以在锂电池充放电的过程中,

  • RAID的缓存级别会从write back变成write through,我们通过RAID写数据的时候,IO就直接写磁盘了,此时会有重大问题;
  • 如果写内存的话,性能也就是0.1ms这个级别,但是直接写磁盘,就性能退化10倍到毫秒级了!

所以说,对于那些在生产环境的数据库部署使用了RAID多磁盘阵列存储技术的公司来说,通常都会开启RAID卡的缓存机制,但是此时就一定要注意这个RAID的锂电池自动充放电的问题,因为只要你用了RAID缓存机制,那么锂电池就必然会定时进行充放电去延长寿命,保证服务器掉电的时候可以把缓存数据写回磁盘,数据不会丢失。

所以这个时候一旦RAID锂电池自动充放电,往往会导致你的数据库服务器的RAID存储定期的性能出现几十倍的抖动,间接导致你的数据库每隔一段时间就会出现性能几十倍的抖动!