由于旧服务器即将报废,我们将一个带有 Oracle 数据库的 Web 应用程序移至新服务器。旧服务器有两个镜像硬盘和一个单独的非镜像 SSD,用于存储 Oracle 数据文件(无重做和撤消日志)。新服务器的配置几乎相同,只是现在有两个 SSD 来对它们进行镜像。
不幸的是,带有 SSD 的软件 RAID-1 的随机写入性能非常差。在夜间,当大量数据合并到数据库中时,Web 应用程序几乎停止工作,因为添加日志条目等简单的插入操作需要 20 秒或更长时间。RAID-1 根本无法跟上夜间作业(随机访问数据文件)引起的 Oracle 写入请求。
然后我将配置恢复为旧配置:没有 RAID,只有一个 SSD 用于数据文件。现在性能问题已经消失,Web 应用程序始终运行顺畅,夜间作业比使用 RAID 时快 10 倍左右(与旧服务器大致相同)。
软件 RAID 怎么可能比没有 RAID 的相同驱动器慢至少 10 倍?
硬件:
- 英特尔至强 E3-1245 V2 @ 3.40GHz
- 32 GB 内存
- 2 个希捷 Constellation ES.2 ST33000650NS
- 2 个英特尔 SSDSC2BW240A4
设置 RAID 的命令:
# mdadm –-create –-name=3 /dev/md/3 --level=raid1 --raid-devices=2 /dev/sda1 /dev/sdb1
# mkfs.ext4 /dev/md3
顺便说一句:我无法在新服务器上运行任何实验,因为我们面临着使其投入使用的压力(旧服务器已经不行了)。
答案1
您有足够的钱来支付 Oracle 费用,但却没有足够的钱来支付测试环境的费用?
没有答案(虽然对于评论来说有点长)但有一些观察:
SSD 对其物理块大小撒了谎 - 这实际上是擦除块的大小 - 这个数字是巨大的。
大多数磁盘也会谎报其几何形状(因此你可以用 MS-DOS 格式化它们)——但是这个真的损害数据条带化 RAID 级别的性能(但我预计不会对镜像产生太大影响)。
您没有向我们展示它们是如何分区的,也没有向我们展示您配置了什么日志记录。
你需要告诉 ext 有关 RAID 配置- 尽管再次IIRC这对于条带化而不是镜像来说更多的是一个问题。
镜像上的写入操作永远不会比单个磁盘更快(可能最多慢 2 倍,尽管更多时候在 20% 左右)。
SSD 的问题在于写入磨损。在镜像中,即使是来自同一批次的旋转锈蚀磁盘,同时发生故障的情况也很罕见。另一方面,2 个 SSD 同时发生故障的可能性更大。一种解决方案是故意错开磁盘的使用寿命。但如果我要设置一台具有这种硬件组合的机器,我会使用 mdadm 来配置混合存储- SSD 和 HD 之间的镜像集。
我怀疑问题出在文件系统层——如果它不在生产中,那么我建议让 Oracle 访问镜像设备作为原始分区并检查性能。
答案2
答案3
Redhat 不推荐使用 SSD 和 mdadm 的 RAID 1:
在这些 RAID 级别的初始化阶段,某些 RAID 管理实用程序(例如 mdadm)会写入存储设备上的所有块,以确保校验和正常运行。这将导致 SSD 的性能快速下降。
其他地方也有人表达了类似的担忧:
修剪 (https://en.wikipedia.org/wiki/TRIM) 目前在硬件控制器上不支持 SSD 上的 RAID,如果您正在使用软件 RAID,大多数 Linux 发行版都不支持开箱即用的 RAID 上的 TRIM,因此在对磁盘进行一次写入后,您会看到性能急剧下降。在许多 RAID 配置中,您将在格式化磁盘时对整个磁盘进行零写入,因此性能从一开始就会很差。