Oracle数据库的建议RAID配置是什么?


16

RAID(廉价磁盘冗余阵列)具有不同的配置(RAID-0,RAID-1 ...)。在安装Oracle数据库时应设置和使用的推荐RAID配置是什么?该数据库将主要用作数据仓库。


RAID0和RAID1是完全不同的东西。如果驱动器发生故障,则仅将RAID0用于性能,将RAID1仅用于容错。
乔纳斯(Jonas)

4
永远不要在数据库服务器上使用RAID0。除非您当然喜欢从磁带还原。
mrdenny

Answers:


13

这取决于。在查看数据仓库时,如果您没有特定的设计思路,那么自动存储管理可能是一个不错的选择。

考虑在AskTomOTN论坛OTN论坛2OTN论坛3上的讨论

没有正确的处理方式,答案会根据一系列硬件和网络因素而变化。为了自己发现,请在基于ASM的计算机,通过Linux虚拟化Raid的SAN以及基于硬件的RAID机器上预加载一个示例数据仓库(仅一个或两个,足以使用)。

通过对所有三个环境的查询结果进行计时,您将能够发现哪种方法最适合您的性能。我已经使用ASN和基于linux的虚拟RAID部署了数据库,并且虚拟RAID的性能略有改善(几年前。)但是,我怀疑这部分是驱动器设置的方式。

没有一个正确的答案。如果您可以向我们提供有关大小和性能要求的更多详细信息,则有可能探索各种测试案例。

- 编辑 -

每个“ 磁盘组 ”可以由相应子系统上的一个或多个磁盘,目录或文件组成。Oracle 建议 “为获得最佳性能和可靠性,请在多个物理设备上选择一个RAID设备或一个逻辑卷,并实施条带镜像全部(SAME)方法。” 在文件系统上放置文件时。看起来好像oracle建议RAID 1 + 0。

ASM管理的磁盘组,但是,“如果使用双向镜像,则普通冗余磁盘组至少需要两个故障组(或两个磁盘设备)。普通冗余磁盘组中的有效磁盘空间是以下值之和的一半。所有设备中的磁盘空间”显然会自动提供镜像。

这些设备本身可以由RAID设备组成,依此类推。在实际测试中,当我设置RAID数据仓库时,文件系统上的简单虚拟RAID 5提供了可接受的性能,而附加的ASM并没有带来性能优势。在这种优化任务中,首先确定您的资源,然后测试每个可能的配置,因为有时结果可能会非常违反直觉。


1
虚拟突袭听起来很有趣:/
jcolebrand

10

如果您有两个物理驱动器:

RAID0:快速但无冗余。任何驱动器错误都会杀死整个阵列。有人在RAID0上放置了临时存储(即MSSQL下的tempdb),但我仍然认为这很危险,因为如果阵列跌落,您将不会丢失任何有意义的数据,直到服务器修复后,服务器才会停机。

RAID1:如果您有两个驱动器,请执行此操作。尽管使用良好的控制器可能会提高读取性能,但没有写入性能优势。RAID1的主要功能是使其中一个驱动器失效。

如果您有三个物理驱动器:

如果支持,您可以选择RAID5,非标准的3驱动器RAID10(或IBM控制器所指的RAID1E)。当然,您可以使用RAID1并在其他驱动器之一发生故障时保留备用驱动器,但是无论如何,您都应该在关键任务环境中保留备用驱动器,因此不必多说。

RAID5比RAID10提供更多的空间(两个驱动器,而不是一个半驱动器),但是存在潜在的写入性能问题,因为控制器写入的每个块都需要读取奇偶校验块,对其进行更新并写回。对于数据库写入,此写入性能问题可能会加倍,因为每次更新至少要进行两次写入:一次写入事务日志,一次写入实际数据区域。由于这些天的空间很便宜,如果支持更好的写入性能,我建议使用3驱动器RAID10。Linux的软件RAID和许多IBM控制器(它们称为RAID1E)都提供此功能。您可能还会以其他名称找到它,因为它不被视为标准安排,因此没有标准名称。

R5和R10-over-three都提供相同的冗余度(任何一个驱动器一次都可能出现故障,并且该阵列将继续存在)和相似的读取性能指标(类似于两驱动器RAID0阵列)。

如果您有四个物理驱动器:

如果仅创建一个阵列,则有两个选项(忽略“具有热备用”的变体):RAID6和“传统” RAID10(RAID1的RAID0)。

两者都提供相同的空间(四个驱动器中的两个)。RAID6提供更好的冗余性,因为任何两个驱动器一次都可能发生故障,因为RAID10只能在六个可能的两个驱动器消失的情况中的四个中幸存。两者都具有类似的读取性能,但RAID6的写入性能问题与RAID5相似(在良好的控制器上相同,尽管在较差的控制器上或与软件RAID相比,它可能慢于RAID5,具体取决于操作系统的I / O控制能力。通常出于性能原因通常是数据库的首选-如果需要额外的冗余,则可以使用六个驱动器并具有RAID0或2个3驱动器RAID1。

一旦拥有四个或更多驱动器,事情就会变得更加有趣,因为您可能会有一对单独的RAID1阵列。通过将数据存储保留在一个阵列上并将事务日志保留在另一个阵列上,可以为旋转磁盘带来显着的性能优势-在某些情况下,这可以显着减少磁头移动,并且由于“随机”访问而导致的查找时间是真正的性能杀手。对于数据仓库,假设这意味着相对而言几乎看不到写入,则从数据文件中拆分事务日志的好处可能更为有限,但是您可能仍想考虑多个阵列,而是将数据分区在它们之上,以实现更好的读取性能。

如果您有四个以上的驱动器:

您的选择在这里变得很开放,并且实际上取决于您的数据是什么以及预期的更新/读取负载/模式是什么。例如,我们的服务曾经在12个〜70Gb驱动器上运行:

  • 系统区域(操作系统,SQL Server(在本例中为MSSQL),swap,tempdb)的RAID10大小为4倍。
  • 4倍于RAID10的数据文件
  • 作为事务日志的RAID10的4倍

Tempdb保留在系统阵列上。我们可以将其移至其他两个阵列,然后将系统阵列作为RAID1中的2个驱动器运行,因为系统块并不需要额外的速度(因为这在启动或交换时才非常重要,我们确保存在足够的内存,以至于永远不需要交换),但是通过我们向主机提供商支付那台机器的方式,花掉两个驱动器就不会花多少钱。备份也要先进入系统阵列,然后再复制到服务器外,站点外和离线备份位置。

当然,这对于某些数据库来说严重过高(以这种方式运行小型博客服务器是没有意义的!),但是我们的主应用程序在这种安排下的性能非常好。

如果有六个驱动器,则可以考虑三个RAID1阵列或两个三个驱动器RAID10阵列。

通常

不幸的是,没有真正简单的“最佳实践”,因为它很大程度上取决于系统的大小和使用模式。我能想到的唯一通用规则是:

  • 除非您知道写入性能问题不会严重影响您,否则请避免使用RAID5和6
  • 使用四个或更多基于旋转磁盘的驱动器时,请考虑将其拆分成多个阵列以减少磁头移动(由于无需考虑物理磁头移动,因此多个阵列的全部好处将不适用于优质的SSD,尽管您可能会看到一些差异,具体取决于SSD的控制器的写合并策略等)
  • 再次测试,测试和测试:尝试抽出时间来验证您选择的布置确实是最佳的,这总是很好的

硬件还是软件RAID?

过去,由于奇偶校验计算,以及由于驱动器和CPU之间的接口速度慢而导致的所有安排,软件RAID的性能低于RAID 5的硬件RAID的性能。对于现代CPU来说,奇偶校验计算问题并不是真正的问题,但是如果驱动器速度非常快,那么如果驱动器的总速度可以随处可见,则硬件RAID仍然可以胜出接近(可以猜到一个数量级)机器与磁盘控制器的通讯速度。如果您有一个带有软件RAID的四驱动器RAID1阵列(即,相同数据的四个副本,则具有大量冗余),则每个写操作都会导致OS可能通过硬件将顺序发送的四个大量数据发送到I / O控制器。控制器仅向OS发送一个写请求,然后控制器将其发送到四个驱动器,可能是并行的。

良好的硬件RAID也可以提供其他优势:某些高规格的控制器具有带电池备份的写缓存,因此即使UPS发生故障,在停电时也不会丢失挂起的写操作。

软件RAID显然更便宜,而且更可移植,因此,如果由于控制器/机器故障而不得不移动阵列,则不必绑定到特定的控制器。

廉价的硬件RAID通常将软件和硬件RAID的缺点与很少(或根本没有)两者的优点结合在一起,因此最好避免使用。

我倾向于在我们的开发,测试和UAT服务器上使用软件RAID,并为运行实时客户/面向公众服务的服务器使用良好的硬件RAID。


5

Oracle数据库性能调优指南》有一章专门介绍I / O配置。简而言之:

  • 使用条带化(硬件RAID,软件RAID,ASM)
  • 不要将RAID5用于存档和重做日志
  • 对齐文件系统块大小和数据库块大小

4

在某些情况下,JBOD是正确的答案(即,不是 RAID)。

问题是,如果RAID组过多,则无法灵活指定物理存储在数据库中的布局方式,例如确保表的索引和记录存储在单独的主轴上,并确保平衡所有磁盘上的写入。

您可以使用条带化(RAID0)来平衡写操作,但是如果它是一个大组,则无法分离出索引和记录。

镜像(RAID1)具有容错能力,并且读取速度更快(因为您可以从不繁忙的主轴中读取数据),但是写入速度则较慢,因为您必须等待两个副本都被写入。

我永远不会在数据库上使用RAID5或RAID6。如果数据很重要,请购买更多磁盘并使用RAID1;否则,请使用RAID1。RAID5 / 6速度很慢(尤其是在软件中),并且在为大型磁盘组更换故障磁盘后,当今的硬盘大小可能需要几天才能重建...更不用说大多数RAID5 / 6系统处理奇偶校验错误的方式是只是重新计算奇偶校验...但很可能是数据中存在故障,而不是奇偶校验,但是您不知道故障在哪里。(不幸的是,我认为数据库没有像LOCKSS这样的东西)

...

我在数据库上看到的最有趣的布局实际上涉及每个主轴有两个分区-磁盘的最内部用于生产数据库,磁盘的剩余部分用于备份。(他们确保分区没有备份到同一主轴;我认为有多个数据库,因此每个数据库都从另一个数据库备份到磁盘)。这给他们带来了优势,他们可以在工作日将事情分散到更多的主轴上,然后在晚上运行备份。

我猜测如果出现问题并且需要还原,恢复速度会较慢,因为在一天使用数据库的过程中,您会从外部磁盘上进行一些读取,但是在所有操作中总会有取舍。

...

因此,无论如何,我要提出的观点是-没有一个适合所有情况的答案。如果有的话,DBA将失业,公司将购买预建的数据库设备。

我处理的数据库被老板称为“ WORN”:一次写入,永不读取;他在开玩笑,但是“数据仓库”可能意味着任何级别的活动……我每天晚上/每周都从磁带上加载了一些数据(这些数据只是OLTP实例的副本,并帮助我们验证了磁带是否良好),并且大量的分析工作都在它们上面进行,而其他的工作则需要不断的输入和偶尔的阅读,但是没有真正的资源竞争。


1
Grr没有投票。今晚我将回到这一点,因为我非常喜欢您的一些观点。我也是JBOD的忠实拥护者,或者最好是很多RAID1对。
jcolebrand

@jcolebrand:实际上,在我发布此内容之后,我读了Brian Ballsun-Stanton提到的“ ASM”,看起来好像是Oracle在处理镜像+条带化,而不是在OS / FS /硬件级别,所以我们提出了类似的观点,但是他为最近安装的Oracle提供了更好的解决方案。

就像您建议的那样,哪个需要JBOD,是吗?
jcolebrand

@jcolebrand:差不多。(这是可取的,但我认为不是必须的

3

我对服务器的建议始终是RAID 5。恢复第一个故障硬盘所花费的时间和精力将永远令人难忘。如果确实要设置RAID阵列,则强烈建议您对单个驱动器大小进行标准化,并在服务器机房中存放2个备用硬盘驱动器。一驱动器坏了吗?将其中一个替换项放进去(并重建阵列)。我已经看到RAID阵列严重故障,因为第二个驱动器在等待第一个驱动器到达时损坏了(第二天交付还为时已晚)。


但是更换硬盘不是DBA的职责所在吗?监视磁盘的寿命和故障率适用于SF人群的自动化工具。我们不要重复工作并破坏专业化的原因。毕竟我们 dba的;)
jcolebrand

突袭5在哪里实施?硬件?软件?甲骨文?在多少个磁盘上?Oracle建议的驱动器阵列如何?这不是重做存档日志的目的吗?
Brian Ballsun-Stanton 2011年

2
RAID5可能存在严重的写入性能问题。RAID10在数据库服务器中更为常见。
David Spillett

@jcolebrand,我工作过的许多公司都对待网络管理员==服务器管理员==数据库管理员。在某些国家,只有少数人可以访问生产数据中心,因此这些人必须同时戴两顶帽子。在我工作过的许多公司中,服务器管理员不知道发生了什么事,因此我参与其中,因此我也必须了解他们的工作。
Tangurena 2011年

好吧,这很酷,同时又很烂。很高兴有经验的声音;)[PS:我的经历是+1]
jcolebrand

2

您打算使用多少数据,以及您打算从系统读取和写入数据的频率?有很多计划要进行,足以使某些人将整个学术生涯投入到该主题上。

通常,我会告诉您先进入Wikipedia并阅读本文,然后再继续,因为有很多类型的RAID,每种类型的RAID最好在不同的地方使用。

基础如下:

RAID0

适合视频游戏玩家。对其他任何人都不利。将该缓存用于不需要保留任何时间长度的数据的缓存服务器也不错。磁盘故障后,系统将关闭。游戏结束。

RAID1

伟大的可靠性。没有太多的可扩展性。速度相当不错。

RAID5

RAID0和RAID1之间的首选组合(某种)。

现在,在这之后,实际上它几乎变成了应该在ServerFault上提出的问题,因为它是服务器配置而不是数据库设计。始终与服务器管理员讨论服务器性能。那就是他们在那里的目的。如果这不是私人测试版,我将投票决定将您迁移到那里。


2
虽然ServerFault对于这个问题肯定不是错误的地方,但这里可能是正确的。I / O性能问题是DBA应该注意的问题。
David Spillett

@David我完全同意,但是beig知道和自己指定它是有区别的。以我的经验,当站点变得庞大而繁忙时,这从来都不是一个人的任务。两个脑袋胜过一个脑袋
jcolebrand
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.