高性能MySQL:RAID缓存

作者:港云互联 时间:2020-01-02

        RAID缓存就是物理安装在RAID控制器上的(相对来说)少量内存。它可以用来缓冲硬盘和主机系统之间的数据。下面是RAID卡使用缓存的几个原因:



缓存读取



        控制器从磁盘读取数据并发送到主机系统后,通过缓存可以存储读取的数据,如果将来的请求需要相同的数据,就可以直接使用而无须再次去读盘。



        这实际上是RAID缓存一个很糟糕的用法。为什么呢?由于操作系统和数据库服务器有自己更大得多的缓存。如果数据在这些上层缓存中命中了,RAID缓存中的数据就不会被使用。相反,如果上层的缓存没有命中,就有可能在RAID缓存中命中,但这个概率是微乎其微的。因为RAID缓存要小得多,几乎肯定会被刷新掉,被其他数据填上去了。无论哪种方式,缓冲读都是浪费RAID缓存的事。

高性能MySQL:RAID缓存


缓存预读数据



        如果RAID控制器发现连续请求的数据,可能会决定做预读操作——就是预先取出估计很快会用到的数据。在数据被请求之前,必须有地方放这些数据。这也会使用RAID缓存来放。预读对性能的影响可能有很大的不同,应该检查确保预读确实有帮助。如果数据库服务器做了自己的智能预读(例如InnoDB的预读),RAID控制器的预读可能就没有帮助,甚至可能会干扰所有重要的缓冲和同步写人。



缓冲写入



        RAID控制器可以在高速缓存里缓冲写操作,并且一段时间后再写到硬盘。这样做有双重的好处:首先,可以快得多地返回给主机系统写“成功”的信号,远远比写人到物理磁盘上要快;其次,可以通过积累写操作从而更有效地批量操作。



内部操作



        某些RAID的操作是非常复杂的一尤其是RAID5的写人操作,其中要计算校验位,用来在发生故障时重建数据。控制器做这类内部操作需要使用一些内存 。这也是RAID 5在一些RAID控制器上性能差的原因:为了好的性能需要读取大量数据到内存。有些控制器不能较好地平衡缓存写和RAID5校验位操作所需要的内存。



        一般情况下,RAID控制器的内存是一种稀缺资源, 应该尽量用在刀刃上。缓存读取通常是一种浪费,但是缓冲写人是加速I/O性能的一个重要途径。许多控制器可以选择如何分配内存。例如,可以选择有多少缓存用于写人和多少用于读取。对于RAID 0、RAID 1和RAID 10,应该把控制器缓存100%分配给写人用。对于RAID5,应该保留一些内存给内部操作。 通常这是正确的建议,但并不总是适用一不同的 RAID卡需要不同的配置。



        当正在用RAID级存缓冲写人时,许多控制器可以配置延迟写人多久时间(例如一秒钟、五秒钟,等等)是可以接受的。较长的延迟意味着更多的写人可以组合在一起更有效地刷新到磁盘。缺点是写人会变得更加“突发的"。但这不是一件坏事,除非应用连串的写请求把控制器的缓存填满了才被刷新到磁盘。如果没有足够的空间存放应用程序的写人请求,写操作就会等待。保持短的延迟意味着可以有更多的写操作,并且会更低效,但能抚平性能波动,并且有助于保持更多的空闲缓存,来接收应用程序的爆发请求。(我们在这里简化了一事实上控制器往往很复杂, 不同的供应商有自己的均衡算法,所以我们只是试图覆盖基本原则。)



        写入级冲对同步写入非常有用,例如事务日志和二进制日志(sync binlog设置为1)调用的fyecO.但是除非控制器有电池备分单元(BBU)或其他非易失性存储",否则不应该启用RAID缓存。不带BBU的情况下缓冲写,在断电时,有可能损坏数据库,甚至是事务性文件系统。然而,如果有BBU,启用写入缓存可以提升很多日志刷新的工作的性能,例如事务提交时刷新事务日志。



        最后要考虑的是,许多硬盘驱动器有自己的缓存,可能有“假”的fsync()操作,欺骗RAID控制器说数据已被写人物理介质。有时可以让硬盘直接挂载(而不是挂到RAID控制器上),让操作系统管理它们的缓存,但这并不总是有效。这些缓存通常在做fsync()操作时被刷新,另外同步I/0也会绕过它们直接访问磁盘,但是再次提醒,硬盘驱动器可能会骗你。应该确保这些缓存在fsync()时真的刷新了,否则就禁用它们,因为磁盘缓存没有电池供电(所以断电会丢失)。操作系统或RAID固件没有正确地管理硬盘管理已经造成了许多数据丢失的案例。



        由于这个以及其他原因,当安装新硬件时,做一次真实的宕机测试(比如拔掉电源)是很有必要的。通常这是找出隐藏的错误配置或者诡异的硬盘问题的唯一办法。有个方便的脚本可以使用。为了测试是否真的可以依赖RAID控制器的BBU,必须像真实情况“ 样切断电源一段时间,因为某些单元断电超过段时间后就可能会 丢失数据。这里再次重申,任何一个环节出现问题都会使整个存储组件失效。


新人注册,即送价值满880元现金劵

立即注册>>
客服 电话 反馈 活动 回顶部

服务热线

+852-5764-9835

1对1贴心服务,7X24小时热线