Eddie Awad Asked: 2011-01-06 17:54:54 +0800 CST2011-01-06 17:54:54 +0800 CST 2011-01-06 17:54:54 +0800 CST Oracle 数据库的推荐 RAID 配置是什么? 772 RAID(廉价磁盘冗余阵列)具有不同的配置(RAID-0、RAID-1...)。安装 Oracle 数据库时应设置和使用的推荐 RAID 配置是什么。该数据库将主要用作数据仓库。 oracle best-practices 6 个回答 Voted Best Answer Brian Ballsun-Stanton 2011-01-06T20:15:21+08:002011-01-06T20:15:21+08:00 这取决于。在查看数据仓库时,如果您没有考虑特定的设计,自动存储管理可能是一个很好的途径。 考虑AskTom、OTN 论坛、OTN 论坛 2和OTN 论坛 3上的讨论。 没有一种正确的方法来处理事情,并且答案会根据许多硬件和网络因素而变化。为了自己发现,在基于 ASM 的机器上、在由 linux 虚拟化 Raid 的 SAN 上和基于硬件的 raid 机器上预加载一个示例数据仓库(只有一两个 gig,足够玩)。 通过对所有三种环境的查询结果进行计时,您将能够发现哪种方法在性能方面最适合您。我已经使用 ASN 和基于 linux 的虚拟 RAID 部署了数据库,并且虚拟 RAID 的表现稍微好一些(几年前)。但是,我怀疑这部分是驱动器的设置方式。 没有单一的正确答案。如果您可以向我们提供有关大小和性能要求的更多详细信息,则可以探索各种测试用例。 - 编辑 - 每个“磁盘组”可能由相应子系统上的一个或多个磁盘、目录或文件组成。Oracle建议“为了获得最佳性能和可靠性,请在多个物理设备上选择一个 RAID 设备或逻辑卷,并实施条带化和镜像化 (SAME) 方法。” 在文件系统上放置文件时。读起来好像 oracle 建议使用 RAID 1+0。 但是,ASM 管理的磁盘组,“如果您使用双向镜像,正常冗余磁盘组至少需要两个故障组(或两个磁盘设备)。正常冗余磁盘组中的有效磁盘空间是总和的一半其所有设备中的磁盘空间”显然会自动提供镜像。 这些设备本身可以由 RAID 设备等组成。在我设置 RAID 数据仓库时的实际测试中,文件系统上的简单虚拟 RAID 5 提供了可接受的性能,而额外的 ASM 并没有增加性能优势。在这种优化任务中,首先确定您的资源,然后测试所有可能的配置,因为有时结果可能非常违反直觉。 David Spillett 2011-01-07T04:35:00+08:002011-01-07T04:35:00+08:00 如果您有两个物理驱动器: RAID0:快速但没有冗余。任何驱动器错误都会杀死整个阵列。有些人将临时存储放在 RAID0 上(即 MSSQL 下的 tempdb),但我仍然认为这很危险,因为如果阵列倒塌,您不会丢失任何有意义的数据,但在修复它之前,您将有服务器中断。 RAID1:如果你有两个驱动器,那就去吧。尽管您可能会看到使用良好的控制器提高读取性能,但没有写入性能优势。RAID1 的关键特性是在其中一个死掉的驱动器中幸存下来。 如果您有三个物理驱动器: 如果支持,您的选项是 RAID5,非标准 3 驱动器 RAID10(或 IBM 控制器所指的 RAID1E)。您当然可以使用 RAID1 并保留额外的驱动器作为备用驱动器,以备其他驱动器之一发生故障时使用,但无论如何您都应该在关键任务环境中保留备用驱动器,所以这是不言而喻的。 RAID5 提供比 RAID10 更多的空间(两个驱动器,而不是一个半),但存在潜在的写入性能问题,因为控制器需要读取奇偶校验块、更新和写回每个写入的块。这个写入性能问题对于数据库写入可能会加倍,因为每次更新至少有两次写入:一次写入事务日志,一次写入实际数据区域。由于现在空间很便宜,如果支持更好的写入性能,我会推荐 3 驱动器 RAID10。Linux 的软件 RAID 提供了这一点,许多 IBM 控制器也提供了这一点(他们称之为 RAID1E)。您也可以在其他名称下找到它,因为它不被视为标准排列,因此没有标准名称。 R5 和 R10-over-3 都提供相同的冗余(任何一个驱动器一次都可能发生故障,并且阵列将继续存在)和类似的读取性能指标(类似于双驱动器 RAID0 阵列)。 如果您有四个物理驱动器: 如果只创建一个阵列,则有两个选项(忽略“带热备用”变体):RAID6 和“传统”RAID10(RAID1 的 RAID0)。 两者都提供相同的空间(四个驱动器中的两个)。RAID6 提供了更好的冗余性,因为任何两个驱动器都可能同时发生故障,而 RAID10 只能承受六种可能的两个驱动器丢失情况中的四种。两者都提供类似的读取性能,但 RAID6 具有类似于 RAID5 的写入性能问题(在好的控制器上也是如此,尽管它可能比坏控制器上的 RAID5 慢,或者根据操作系统的 I/O 控制功能使用软件 RAID。RAID10 是出于性能原因,通常首选用于数据库 - 如果您需要额外的冗余,您可以使用六个驱动器并拥有一个 RAID0 或 2 个 3 驱动器 RAID1。 一旦您拥有四个或更多驱动器,事情就会变得更有趣,因为您可以拥有一对单独的 RAID1 阵列。通过将数据存储在一个阵列上并将事务日志保存在另一个阵列上,这可以为旋转磁盘提供显着的性能优势 - 这可以在某些情况下显着减少磁头移动,并且由于“随机”访问而导致的寻道时间是真正的性能杀手。对于数据仓库,假设这意味着相对而言它会看到很少的写入,从数据文件中拆分事务日志的好处可能更有限,但您可能仍需要考虑多个数组,而是将数据分区到它们上以获得更好的读取性能. 如果您有四个以上的驱动器: 您的选项在这里变得非常开放,这实际上取决于您的数据是什么以及您预期的更新/读取负载/模式是什么。例如,我们有一次服务在 12 ~70Gb 驱动器上运行: 4x 作为 RAID10 用于系统区域(OS、SQL Server(在我们的例子中为 MSSQL)、swap、tempdb)。 4x 作为 RAID10 用于数据文件 事务日志的 4x 作为 RAID10 Tempdb 保存在系统阵列上。我们可以将它移动到其他两个阵列,然后将系统阵列作为 RAID1 中的 2 个驱动器运行,因为系统块不需要额外的速度(因为这仅在引导或交换时非常重要,我们确保有足够的 RAM 让它永远不需要交换),但是通过我们为那组机器支付托管服务提供商的方式,我们不会花费更少的钱来丢弃这两个驱动器。在被复制到离线、离线和离线备份位置之前,备份也会进入系统阵列。 当然,这对于某些数据库来说是非常过分的(以这种方式运行小型博客服务器是没有意义的!)但是我们的主应用程序在这种安排下表现得非常好。 如果您有六个驱动器,您可能会考虑三个 RAID1 阵列或两个三驱动器 RAID10 阵列。 一般来说 不幸的是,没有真正简单的“最佳实践”,因为它在很大程度上取决于您系统的大小和使用模式。我能想到的唯一一般规则是: 避免使用 RAID5 和 6,除非您知道写入性能问题不会对您产生重大影响 对于四个或更多基于旋转磁盘的驱动器,考虑将事物拆分到多个阵列上以减少磁头移动(多个阵列的全部优势不适用于优质 SSD,因为无需考虑物理磁头移动,尽管您可能会看到一些差异,具体取决于SSD 控制器的写入组合策略等) 测试,测试,再测试:找时间验证你选择的安排确实是最佳的总是好的 硬件或软件 RAID? 过去,由于奇偶校验计算以及由于驱动器和 CPU 之间的缓慢接口而导致的所有安排,软件 RAID 的性能低于 RAID 5 的硬件 RAID。对于现代 CPU,奇偶校验计算问题并不是真正的问题,但如果你有非常快的驱动器,如果驱动器的总速度可以随处可见,那么硬件 RAID 仍然可以胜出接近(在一个数量级内,猜测)机器与磁盘控制器通信的速度。如果您有一个带有软件 RAID 的四驱动器 RAID1 阵列(即相同数据的四个副本以实现大量冗余),则每次写入操作都会导致操作系统向 I/O 控制器发送四批数据,可能按顺序发送 - 使用硬件控制器操作系统只发送一个写请求,控制器将其发送到四个驱动器,可能是并行的。 良好的硬件 RAID 还可以提供其他优势:例如,一些高规格的控制器具有带电池备份的写入缓存,因此即使您的 UPS 发生故障,挂起的写入也不会在断电时丢失。 软件 RAID 显然更便宜,更便携,因此如果您因控制器/机器故障而必须移动阵列,您就不必绑定到特定的控制器。 廉价的硬件 RAID 通常结合了软件和硬件 RAID 的缺点,而两者的优点很少(或没有),因此最好避免。 我倾向于在我们的开发、测试和 UAT 服务器上使用软件 RAID,并为运行实时客户/面向公众服务的服务器使用良好的硬件 RAID。 Joe 2011-01-07T06:35:15+08:002011-01-07T06:35:15+08:00 在某些情况下,JBOD 是正确的答案(即,不是RAID)。 问题是,如果您的 RAID 组太大,您将无法灵活地指定物理存储在数据库中的布局方式,例如确保表的索引和记录存储在不同的轴上,并确保平衡所有磁盘的写入。 您可以使用条带化 (RAID0) 来平衡写入,但如果它是一个大组,则无法将索引与记录分开。 镜像 (RAID1) 具有容错性,并且读取速度更快(因为您可以从任何不忙的主轴读取),但写入速度可能较慢,因为您必须等待两个副本都已写入。 我永远不会在数据库上使用 RAID5 或 RAID6。如果数据很重要,请购买更多磁盘并使用RAID1;RAID5/6 速度很慢(尤其是在软件方面),并且在为大型磁盘组更换故障磁盘后,以今天的硬盘大小可能需要几天的时间来重建……更不用说大多数 RAID5/6 系统处理奇偶校验错误的方式是只是重新计算奇偶校验......但很可能,错误在数据中,而不是奇偶校验,但你不知道错误在哪里。(不幸的是,我认为数据库没有像 LOCKSS 这样的东西) ... 我在数据库中看到的最有趣的布局实际上涉及每个主轴有两个分区——磁盘的最里面部分用于生产数据库,磁盘的上方部分用于备份。(他们确保没有将分区备份到同一主轴;我认为有多个数据库,因此每个数据库都从不同的磁盘备份到磁盘)。这给了他们优势,可以在工作日将内容分散到更多的主轴上,然后在晚上运行备份。 我猜如果出现问题并且您需要恢复,恢复速度会较慢,因为当数据库在一天中使用时,您会从外部磁盘读取一些数据,但总要权衡一切。 ... 所以,无论如何,我要说明的一点是——没有一个适合所有情况的答案。如果有,DBA 就会失业,公司会购买预先构建的数据库设备。 我处理的数据库是我老板所说的“WORN”:只写一次,不读;他在开玩笑,但“数据仓库”可能意味着任何级别的活动......我已经看到一些每晚/每周从磁带加载的内容(并且只是 OLTP 实例的副本,并帮助我们验证磁带是否良好)和大量的分析作业在它们上运行,而其他一些则有源源不断的输入和偶尔的读取,但没有真正的资源竞争。 Benoit 2011-03-04T07:24:17+08:002011-03-04T07:24:17+08:00 “ Oracle 数据库性能调优指南”有一章专门介绍I/O 配置。简而言之: 使用条带化(硬件 RAID、软件 RAID、ASM) 不要将 RAID5 用于归档和重做日志 对齐文件系统块大小和数据库块大小 Tangurena 2011-01-06T20:50:43+08:002011-01-06T20:50:43+08:00 我对服务器的建议始终是RAID 5。恢复您的第一个故障硬盘所花费的时间和精力将永远令人难忘。如果您确实设置了 RAID 阵列,我强烈建议您标准化单个驱动器大小并在服务器机房中存放 2 个备用硬盘驱动器。一个驱动器坏了?将其中一个替换件放入(并让阵列重建)。我已经看到 RAID 阵列出现严重故障,因为第二个驱动器在等待第一个驱动器到达时出现故障(第二天交付仍然为时已晚)。 jcolebrand 2011-01-06T19:13:34+08:002011-01-06T19:13:34+08:00 您计划使用多少数据以及从系统读取和写入的频率如何?在这方面有很多计划,足以让一些人将整个学术生涯都投入到这个主题上。 通常我会告诉您在继续之前转到 Wikipedia 并阅读该文章,因为有很多类型的 RAID,并且每种类型最好在不同的地方使用。 基本情况是这样的: RAID0 适合视频游戏玩家。对其他任何人都不利。将它用于不需要将数据保留任何时间长度的缓存服务器也不错。一旦磁盘发生故障,系统就会关闭。游戏结束。 RAID1 非常适合可靠性。可扩展性不大。速度还不错。 RAID5 RAID0 和 RAID1 之间的首选组合(有点)。 现在,在这之后,它真的变成了几乎应该在 ServerFault 上询问的东西,因为它是服务器配置而不是数据库设计。始终与您的服务器管理员讨论服务器性能。这就是他们的目的。如果这不是私人测试版,我会投票关闭以将您迁移到那里。
这取决于。在查看数据仓库时,如果您没有考虑特定的设计,自动存储管理可能是一个很好的途径。
考虑AskTom、OTN 论坛、OTN 论坛 2和OTN 论坛 3上的讨论。
没有一种正确的方法来处理事情,并且答案会根据许多硬件和网络因素而变化。为了自己发现,在基于 ASM 的机器上、在由 linux 虚拟化 Raid 的 SAN 上和基于硬件的 raid 机器上预加载一个示例数据仓库(只有一两个 gig,足够玩)。
通过对所有三种环境的查询结果进行计时,您将能够发现哪种方法在性能方面最适合您。我已经使用 ASN 和基于 linux 的虚拟 RAID 部署了数据库,并且虚拟 RAID 的表现稍微好一些(几年前)。但是,我怀疑这部分是驱动器的设置方式。
没有单一的正确答案。如果您可以向我们提供有关大小和性能要求的更多详细信息,则可以探索各种测试用例。
- 编辑 -
每个“磁盘组”可能由相应子系统上的一个或多个磁盘、目录或文件组成。Oracle建议“为了获得最佳性能和可靠性,请在多个物理设备上选择一个 RAID 设备或逻辑卷,并实施条带化和镜像化 (SAME) 方法。” 在文件系统上放置文件时。读起来好像 oracle 建议使用 RAID 1+0。
但是,ASM 管理的磁盘组,“如果您使用双向镜像,正常冗余磁盘组至少需要两个故障组(或两个磁盘设备)。正常冗余磁盘组中的有效磁盘空间是总和的一半其所有设备中的磁盘空间”显然会自动提供镜像。
这些设备本身可以由 RAID 设备等组成。在我设置 RAID 数据仓库时的实际测试中,文件系统上的简单虚拟 RAID 5 提供了可接受的性能,而额外的 ASM 并没有增加性能优势。在这种优化任务中,首先确定您的资源,然后测试所有可能的配置,因为有时结果可能非常违反直觉。
如果您有两个物理驱动器:
RAID0:快速但没有冗余。任何驱动器错误都会杀死整个阵列。有些人将临时存储放在 RAID0 上(即 MSSQL 下的 tempdb),但我仍然认为这很危险,因为如果阵列倒塌,您不会丢失任何有意义的数据,但在修复它之前,您将有服务器中断。
RAID1:如果你有两个驱动器,那就去吧。尽管您可能会看到使用良好的控制器提高读取性能,但没有写入性能优势。RAID1 的关键特性是在其中一个死掉的驱动器中幸存下来。
如果您有三个物理驱动器:
如果支持,您的选项是 RAID5,非标准 3 驱动器 RAID10(或 IBM 控制器所指的 RAID1E)。您当然可以使用 RAID1 并保留额外的驱动器作为备用驱动器,以备其他驱动器之一发生故障时使用,但无论如何您都应该在关键任务环境中保留备用驱动器,所以这是不言而喻的。
RAID5 提供比 RAID10 更多的空间(两个驱动器,而不是一个半),但存在潜在的写入性能问题,因为控制器需要读取奇偶校验块、更新和写回每个写入的块。这个写入性能问题对于数据库写入可能会加倍,因为每次更新至少有两次写入:一次写入事务日志,一次写入实际数据区域。由于现在空间很便宜,如果支持更好的写入性能,我会推荐 3 驱动器 RAID10。Linux 的软件 RAID 提供了这一点,许多 IBM 控制器也提供了这一点(他们称之为 RAID1E)。您也可以在其他名称下找到它,因为它不被视为标准排列,因此没有标准名称。
R5 和 R10-over-3 都提供相同的冗余(任何一个驱动器一次都可能发生故障,并且阵列将继续存在)和类似的读取性能指标(类似于双驱动器 RAID0 阵列)。
如果您有四个物理驱动器:
如果只创建一个阵列,则有两个选项(忽略“带热备用”变体):RAID6 和“传统”RAID10(RAID1 的 RAID0)。
两者都提供相同的空间(四个驱动器中的两个)。RAID6 提供了更好的冗余性,因为任何两个驱动器都可能同时发生故障,而 RAID10 只能承受六种可能的两个驱动器丢失情况中的四种。两者都提供类似的读取性能,但 RAID6 具有类似于 RAID5 的写入性能问题(在好的控制器上也是如此,尽管它可能比坏控制器上的 RAID5 慢,或者根据操作系统的 I/O 控制功能使用软件 RAID。RAID10 是出于性能原因,通常首选用于数据库 - 如果您需要额外的冗余,您可以使用六个驱动器并拥有一个 RAID0 或 2 个 3 驱动器 RAID1。
一旦您拥有四个或更多驱动器,事情就会变得更有趣,因为您可以拥有一对单独的 RAID1 阵列。通过将数据存储在一个阵列上并将事务日志保存在另一个阵列上,这可以为旋转磁盘提供显着的性能优势 - 这可以在某些情况下显着减少磁头移动,并且由于“随机”访问而导致的寻道时间是真正的性能杀手。对于数据仓库,假设这意味着相对而言它会看到很少的写入,从数据文件中拆分事务日志的好处可能更有限,但您可能仍需要考虑多个数组,而是将数据分区到它们上以获得更好的读取性能.
如果您有四个以上的驱动器:
您的选项在这里变得非常开放,这实际上取决于您的数据是什么以及您预期的更新/读取负载/模式是什么。例如,我们有一次服务在 12 ~70Gb 驱动器上运行:
Tempdb 保存在系统阵列上。我们可以将它移动到其他两个阵列,然后将系统阵列作为 RAID1 中的 2 个驱动器运行,因为系统块不需要额外的速度(因为这仅在引导或交换时非常重要,我们确保有足够的 RAM 让它永远不需要交换),但是通过我们为那组机器支付托管服务提供商的方式,我们不会花费更少的钱来丢弃这两个驱动器。在被复制到离线、离线和离线备份位置之前,备份也会进入系统阵列。
当然,这对于某些数据库来说是非常过分的(以这种方式运行小型博客服务器是没有意义的!)但是我们的主应用程序在这种安排下表现得非常好。
如果您有六个驱动器,您可能会考虑三个 RAID1 阵列或两个三驱动器 RAID10 阵列。
一般来说
不幸的是,没有真正简单的“最佳实践”,因为它在很大程度上取决于您系统的大小和使用模式。我能想到的唯一一般规则是:
硬件或软件 RAID?
过去,由于奇偶校验计算以及由于驱动器和 CPU 之间的缓慢接口而导致的所有安排,软件 RAID 的性能低于 RAID 5 的硬件 RAID。对于现代 CPU,奇偶校验计算问题并不是真正的问题,但如果你有非常快的驱动器,如果驱动器的总速度可以随处可见,那么硬件 RAID 仍然可以胜出接近(在一个数量级内,猜测)机器与磁盘控制器通信的速度。如果您有一个带有软件 RAID 的四驱动器 RAID1 阵列(即相同数据的四个副本以实现大量冗余),则每次写入操作都会导致操作系统向 I/O 控制器发送四批数据,可能按顺序发送 - 使用硬件控制器操作系统只发送一个写请求,控制器将其发送到四个驱动器,可能是并行的。
良好的硬件 RAID 还可以提供其他优势:例如,一些高规格的控制器具有带电池备份的写入缓存,因此即使您的 UPS 发生故障,挂起的写入也不会在断电时丢失。
软件 RAID 显然更便宜,更便携,因此如果您因控制器/机器故障而必须移动阵列,您就不必绑定到特定的控制器。
廉价的硬件 RAID 通常结合了软件和硬件 RAID 的缺点,而两者的优点很少(或没有),因此最好避免。
我倾向于在我们的开发、测试和 UAT 服务器上使用软件 RAID,并为运行实时客户/面向公众服务的服务器使用良好的硬件 RAID。
在某些情况下,JBOD 是正确的答案(即,不是RAID)。
问题是,如果您的 RAID 组太大,您将无法灵活地指定物理存储在数据库中的布局方式,例如确保表的索引和记录存储在不同的轴上,并确保平衡所有磁盘的写入。
您可以使用条带化 (RAID0) 来平衡写入,但如果它是一个大组,则无法将索引与记录分开。
镜像 (RAID1) 具有容错性,并且读取速度更快(因为您可以从任何不忙的主轴读取),但写入速度可能较慢,因为您必须等待两个副本都已写入。
我永远不会在数据库上使用 RAID5 或 RAID6。如果数据很重要,请购买更多磁盘并使用RAID1;RAID5/6 速度很慢(尤其是在软件方面),并且在为大型磁盘组更换故障磁盘后,以今天的硬盘大小可能需要几天的时间来重建……更不用说大多数 RAID5/6 系统处理奇偶校验错误的方式是只是重新计算奇偶校验......但很可能,错误在数据中,而不是奇偶校验,但你不知道错误在哪里。(不幸的是,我认为数据库没有像 LOCKSS 这样的东西)
...
我在数据库中看到的最有趣的布局实际上涉及每个主轴有两个分区——磁盘的最里面部分用于生产数据库,磁盘的上方部分用于备份。(他们确保没有将分区备份到同一主轴;我认为有多个数据库,因此每个数据库都从不同的磁盘备份到磁盘)。这给了他们优势,可以在工作日将内容分散到更多的主轴上,然后在晚上运行备份。
我猜如果出现问题并且您需要恢复,恢复速度会较慢,因为当数据库在一天中使用时,您会从外部磁盘读取一些数据,但总要权衡一切。
...
所以,无论如何,我要说明的一点是——没有一个适合所有情况的答案。如果有,DBA 就会失业,公司会购买预先构建的数据库设备。
我处理的数据库是我老板所说的“WORN”:只写一次,不读;他在开玩笑,但“数据仓库”可能意味着任何级别的活动......我已经看到一些每晚/每周从磁带加载的内容(并且只是 OLTP 实例的副本,并帮助我们验证磁带是否良好)和大量的分析作业在它们上运行,而其他一些则有源源不断的输入和偶尔的读取,但没有真正的资源竞争。
“ Oracle 数据库性能调优指南”有一章专门介绍I/O 配置。简而言之:
我对服务器的建议始终是RAID 5。恢复您的第一个故障硬盘所花费的时间和精力将永远令人难忘。如果您确实设置了 RAID 阵列,我强烈建议您标准化单个驱动器大小并在服务器机房中存放 2 个备用硬盘驱动器。一个驱动器坏了?将其中一个替换件放入(并让阵列重建)。我已经看到 RAID 阵列出现严重故障,因为第二个驱动器在等待第一个驱动器到达时出现故障(第二天交付仍然为时已晚)。
您计划使用多少数据以及从系统读取和写入的频率如何?在这方面有很多计划,足以让一些人将整个学术生涯都投入到这个主题上。
通常我会告诉您在继续之前转到 Wikipedia 并阅读该文章,因为有很多类型的 RAID,并且每种类型最好在不同的地方使用。
基本情况是这样的:
RAID0
适合视频游戏玩家。对其他任何人都不利。将它用于不需要将数据保留任何时间长度的缓存服务器也不错。一旦磁盘发生故障,系统就会关闭。游戏结束。
RAID1
非常适合可靠性。可扩展性不大。速度还不错。
RAID5
RAID0 和 RAID1 之间的首选组合(有点)。
现在,在这之后,它真的变成了几乎应该在 ServerFault 上询问的东西,因为它是服务器配置而不是数据库设计。始终与您的服务器管理员讨论服务器性能。这就是他们的目的。如果这不是私人测试版,我会投票关闭以将您迁移到那里。