我们已经将带有Oracle数据库的Web应用程序移动到新服务器上,因为旧服务器正在死亡。 旧服务器有两个镜像硬盘和一个用于Oracle数据文件的独立非镜像SSD(无重做和撤消日志)。 新的服务器有几乎相同的configuration,除了现在有两个SSD镜像以及。
不幸的是,带SSD的软件RAID-1的随机写入性能非常差。 在大量数据合并到数据库的夜晚,Web应用程序几乎停止工作,因为简单的插入操作(如添加日志条目)需要20秒或更长时间。 RAID-1根本无法跟上由夜间作业(随机访问数据文件)导致的Oracle写入请求。
然后,我将configuration恢复到原来的configuration:没有RAID,只有一个SSD用于数据文件。 现在,性能问题已经消失,Web应用程序在任何时候都非常活跃,夜间工作速度比使用RAID的速度快10倍左右(与旧服务器上的速度差不多)。
软件RAID如何可能至less比没有RAID的同一个驱动器慢10倍?
硬件:
设置RAID的命令:
# mdadm –-create –-name=3 /dev/md/3 --level=raid1 --raid-devices=2 /dev/sda1 /dev/sdb1 # mkfs.ext4 /dev/md3
顺便说一句:我不能在新的服务器上运行任何实验,因为我们一直承受着压力,要求将它设置成高效率的(老的死亡)。
你有足够的钱为甲骨文付钱,但没有足够的钱用于testing环境?
没有答案(虽然评论有点长),但是有一些观察:
固态硬盘是关于其物理块大小 – 这实际上是擦除块大小 – 这是巨大的。
大多数磁盘也是关于它们的几何形状(所以你可以从MS-DOS格式化) – 但是这真的伤害了数据分割RAID级别的性能(但是我不会期望对镜像有太多的影响)。
你没有告诉我们他们是如何分区的,也没有告诉你configuration的是什么。
你需要告诉ext关于RAIDconfiguration – 虽然再次IIRC这是更多的问题,而不是镜像条带。
在镜像上的写操作永远不会比单个磁盘更快(可能高达2倍慢,但更多的是在20%的区域内)。
SSD的问题是写入磨损。 在镜像中,即使是同一批次的防锈盘也是不常见的,因此同时出现故障。 OTOH其质量更可能是2个固态硬盘同时失效。 一个解决scheme是有意错开磁盘的使用寿命。 但是如果我使用这个硬件组合来设置一台机器,我会使用mdadmconfiguration混合存储 – SSD和HD之间的镜像组。
我怀疑问题是在文件系统层 – 如果它不在生产中,那么我build议让Oracle访问镜像设备作为原始分区并检查性能。
我猜数据alignment问题。 每个级别(分区,RAID,文件系统)必须从超级单元边界开始。 如果不是的话,每一个擦除周期(闪存技术的最糟糕的部分)将会被有效地复制。
OCZ论坛上有一个在线工具来计算约定。 这可能有帮助。
Redhatbuild议不要使用带有SSD和mdadm的RAID 1:
在这些RAID级别的初始化阶段,一些RAIDpipe理实用程序(如mdadm)会写入存储设备上的所有块,以确保校验和正常运行。 这将导致SSD的性能迅速下降。
第21章固态硬盘部署指南
其他地方也有类似的担忧:
在硬件控制器上,固态硬盘上的RAID不支持TRIM( https://en.wikipedia.org/wiki/TRIM ),如果您正在进行软件操作,大多数Linux发行版不支持TRIM。 RAID,所以当你在磁盘上进行一次写入操作之后,你会看到磁盘的性能就像一块石头。 在许多RAIDconfiguration中,格式化时将会写入整个磁盘,所以性能将从一开始就吸引。