我在我的个人计算机上运行 MongoDB。我注意到,当数据位于我的 2 个最近旋转的硬盘驱动器软件 RAID1 上时,性能比位于没有 RAID 的旧旋转硬盘驱动器上时要慢得多。
旧驱动器,无 RAID
单次操作:
> var d = new Date(); db.test.createIndex({ "test": 1 } ); print(new Date - d + 'ms');
251ms
> var d = new Date(); db.test.createIndex({ "test": "2dsphere" } ); print(new Date - d + 'ms');
83ms
> var d = new Date(); db.dropDatabase(); print(new Date - d + 'ms');
71ms
整个测试套件:250s
最近的驱动器,RAID1
单次操作:
> var d = new Date(); db.test.createIndex({ "test": 1 } ); print(new Date - d + 'ms');
1220ms
> var d = new Date(); db.test.createIndex({ "test": "2dsphere" } ); print(new Date - d + 'ms');
597ms
> var d = new Date(); db.dropDatabase(); print(new Date - d + 'ms');
671ms
> var d = new Date(); db.dropDatabase(); print(new Date - d + 'ms');
1ms
整个测试套件:700s
配置文件
如果它有用(我对此表示怀疑):
/etc/fstab
UUID=d719f337-d835-4688-baf2-3e29f147ff15 / ext4 errors=remount-ro 0 1
# /home was on /dev/md0p3 during installation
UUID=def01643-c71e-47df-9dc8-67096243aee6 /home ext4 defaults 0 2
# swap was on /dev/md0p1 during installation
UUID=d43319a8-92fb-437d-b576-ef964276cde none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
UUID="dd8b1f05-c65b-42e1-a45e-0ef421faf1df" /mnt/bak ext4 defaults,errors=remount-ro 0 1
/etc/mdadm/mdadm.conf
# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes
# automatically tag new arrays as belonging to the local system
HOMEHOST <system>
# instruct the monitoring daemon where to send mail alerts
MAILADDR root
# definitions of existing MD arrays
ARRAY /dev/md/0 metadata=1.2 UUID=3a0f91ae:51c48198:3d1e26ed:118a1938 name=bouzin:0
# This configuration was auto-generated on Sun, 24 Jan 2016 18:00:55 +0100 by mkconf
问题
从我读到的来看,RAID1 上的写访问权限应大致等于单个等效驱动器上的写访问权限。
这个 5400/7200 因子能否解释上述测试中差异的数量级?
如果没有 RAID 会更好吗?
我可以运行任何有趣的测试/基准吗?目前,我只有 Mongo shell 测试,但它们似乎指向 RAID 或驱动器,而不是 Mongo 本身。是否有一些与应用程序无关的测试可以运行来识别任何内容?
RAID 配置是否有问题或不理想?
编辑:
重要的是,我混合了 7200 rpm 和 5400 rpm 的驱动器。
答案1
即使驱动器规格相同,RAID1 也会比单个驱动器慢。
原因是虽然 RAID1 通过对两个驱动器执行每次写入来提高可靠性,但同样的操作会降低性能
RAID0 在 2 个驱动器之间分割写入,这通过共享负载提高了性能,但出于同样的原因降低了可靠性。
RAID5 是一种快乐的媒介,它比单个驱动器具有更好的性能,并且可靠性更高,因为驱动器故障不会导致阵列无法运行(尽管在这些条件下它会大幅减慢速度)。
以上绝不是RAID 级别及其优缺点的详尽列表也没有任何特定 RAID 级别的建议。对于硬件建议https://hardwarerecs.stackexchange.com/是一个不错的选择。
无论您采用何种基准测试方法,为了获得准确的基准测试,您都应该运行多次测试并对结果进行平均,并在系统未运行其他任务时在单用户模式下执行此操作,因为其他任何操作都会扭曲您的结果,可能会导致更高的 iowait比预期的次数。
另一种简单的基准测试形式是dd
使用特定大小的示例文件来运行。假设您拥有(或创建)了一个大小为 X GB 的随机数据源文件。然后你可以运行time dd if=sourcefile of=target file
通过使用 的dd
参数,bs=
您可以使用不同的块大小运行测试(请参阅man dd
),这对于根据您的需求/环境进行调整可能很有用。
这可能是不言而喻的,但用于 RAID 阵列的驱动器的质量是一个重要因素。 Seagate 的 Barracuda Pro 和 WD 的 Gold 数据中心硬盘被指定为在 10^15 位读取(约 125TB)中少于 1 个不可恢复的错误。
然而,许多其他大容量驱动器的规格并不高。如果您在 RAID 中使用低规格驱动器,则重建很可能会失败。
答案2
RAID1 最多将与阵列中最慢的驱动器一样快。
即使您在 RAID1 中有 3 个驱动器,其中两个是企业级 SSD,一个是消费级 HDD,您也将获得该 HDD 的速度。
对于那些从未在 3 个或更多驱动器上使用过或见过 RAID1 的人,这里是 wiki 摘录(关联):
RAID 1 由两个或更多磁盘上一组数据的精确副本(或镜像)组成