5 个大型数据库的驱动器配置

5 个大型数据库的驱动器配置

我有 5 个数据库,每个 300GB,目前位于由 5 个驱动器组成的 RAID 5 阵列中。所有数据库同时大量使用,因此驱动器速度是一个问题。

如果我放弃 RAID 5 配置并将每个数据库放在单独的驱动器上,是否会看到更好的性能?由于其他地方有镜像,因此 RAID 5 提供的冗余不是必需的。

那么服务器是否能够并行对不同的数据库驱动器执行读取/写入操作?至少比在 RAID 中更能做到?

这一切都在 Windows 2003/SQL 2008 上。

答案1

如果数据库同时使用,则将它们放在不同的主轴上执行的速度很可能要快得多。如果它们遇到彼此偏移的繁忙时段,则单个 RAID 阵列的执行速度会更快,因为单个数据库的读取将分散在多个驱动器上(当然,如果数据库位于单个驱动器上,则永远不会如此)。

由于 RAID5 的写入性能不佳,因此它经常成为数据库的性能瓶颈。如果您的阵列是 5 驱动器阵列,那么写入磁盘的每个块都可能导致三次读取,然后是奇偶校验计算,然后是两次写入(更新的块和更新的奇偶校验块),并且数据库中更新的每个页面都会导致至少两次块写入:一次写入事务日志,一次写入数据文件。如果您运行的是 4 驱动器加热备用,情况会好一些,但不会好太多。这就是为什么通常使用 RAID1+0 而不是 RAID5 来进行数据库工作的原因(或者有时使用 RAID1E 或类似产品,如果可用,它们的性能同样更好)。

所有内容都会写入事务日志和数据文件,这是一个重要的事实。通过将日志文件和数据文件放在不同的驱动器上(即放在不同的磁头上),可以大大加快插入/更新操作的速度。最好将数据库安排在五个驱动器上,以便每个数据库的日志和数据都放在不同的驱动器上。如何安排取决于每个数据库的预期活动 - 如果可能的话,您希望避免两个同时繁忙的数据库位于同一驱动器上。

另一个选择是使用两个单独的 RAID1 阵列 - 一个用于所有日志文件,另一个用于数据文件。我认为,如果将每个数据库(数据+日志)放在自己的单个驱动器上,您将看到此方法明显更好的性能。或者,如果您真的不关心冗余(例如,如果您的镜像使用复制/集群安排来维护,这意味着如果主数据库死机,您将丢失很少的交易)您可以使用一对 RAID0 来获得额外的速度。

如果三块硬盘的钱不成问题,而且您的机器有空间容纳更多硬盘,那么您可以拥有一对 RAID10 阵列(一个用于数据,一个用于日志,总共 8 个硬盘),这样您就拥有了冗余,而没有 RAID5 写入性能问题,通过将日志和数据放在不同的硬盘上,您可以获得写入性能提升,并且 RAID10 经常具有潜在的读写提升(具有良好控制器的 4 硬盘 RAID10 的性能往往与 2 硬盘 RAID0 类似)。我们的一些生产数据库就是采用这种安排的,我可以告诉您,它们与我测试过的其他方案相比,效果更好。如果您有一个支持 RAID1E 的硬件控制器(不幸的是,不同的控制器上有不同的名称),那么您可以使用两个 3 驱动器 RAID1E 阵列执行相同操作,只需要 6 个驱动器。

答案2

RAID 5 的写入性能确实很差。对于使用频繁的数据库,最好使用 RAID 10。

相关内容