第3章磁盘实现方法和ASM(针对DBA)随着自动存储管理(ASM)技术的发布,Oracle在10g版本中改变了磁盘访问的前景。本章将重点介绍ASM以及Oracle中非ASM特有的磁盘实现方法。在过去的几年中,磁盘配置技术似乎到达了瓶颈,无法采取进一步的措施来改进系统的性能,同时又不会极大地增加DBA的日常管理工作。如果系统在操作时具有一些独特的特性,或者用户选择频繁地评审表空间上的I/O活动,则相比于在一个逻辑设备中进行所有磁盘使用操作,这些方法能够实现稍好一些的性能。但是,对于在此情况下的大多数人来说,并不值得这样做。如果使用RAW分区并且非常勤奋地进行操作,则可能通过该“技术”改进性能,但是这同样不会简化DBA的日常管理工作。最后,随着单个设备的容量急剧增长,即使是在高端的光纤通信扇区(Fibre-Channelsector)中,事情也变得进一步复杂化,因为现在简单地限制用户只能使用4到6个磁盘,而在以前则可以有一个完整的磁盘阵列或多个磁盘阵列。在最近的OracleDatabase版本中,为用户提供了一个全新的工具箱。现在可以使用更多的特性来管理如何在磁盘上驻留数据。过去18个月中发布的磁盘管理特性数量超出了以前的所有磁盘管理特性。为了更好地管理磁盘,运行Oracle的几乎任OracleDatabase10g性能调整与优化58何人都可以使用这些新特性。不用感到担心,本章仍然会讨论平衡磁盘空间分配和消除磁盘碎片,但是也将讨论一些新特性,我们可以利用这些新特性来避免在过去需要重复执行的一些工作,或者非常有可能避免同时执行这些工作。为了保持系统最高效地运行,本章将介绍如下技巧:●了解存储硬件和它的性能含义●了解RAID级别●在文件系统之间分布“关键”数据文件以最小化争用●移动数据文件以平衡文件I/O●使用本地托管的表空间(LMT)与使用字典托管的表空间●了解大文件表空间并接触8EB字节的Oracle数据库●查看文件和表空间信息以确定问题区域●了解ASM实例、安装和SGA参数调整●了解ASM磁盘、磁盘组和多路径●了解ASM最佳实践和重新平衡实践●通过使用分区避免磁盘争用和管理大型表●适当调整盘区以消除碎片、减少链接并保持最佳性能●管理数据库中的重做和回滚以提高速度●使用撤消管理●只在TEMPORARY表空间中排序●在不同的磁盘和控制器上存放多个控制文件●使用高级文件系统特性和裸设备以改进性能●了解在系统的计划阶段要考虑的问题3.1成为规范的磁盘阵列使用RAID(冗余独立/廉价磁盘阵列,RedundantArrayofIndependent/InexpensiveDisks)配置磁盘现在已经成为一种规范。人们已经普遍使用RAID,甚至是购买没有RAID的中等系统都会承受很大的压力。在本章的后面,您将看到ASM也提供了冗余级别。即使是在个人计算领域,使用一些基于硬件的冗余磁盘配置也已经变得更为常见。对于DBA来说,这意味着比以前更多的管理工作,他们必须采取特殊的保护,确保磁盘阵列配置使用增强的I/O,同时也对磁盘故障提供相应保护。无论RAID配置是基于硬件还是软件,配置工作都应该尽可能地设置正确,以获得最佳的性能,同时保持适当的保护。3.1.1使用磁盘阵列改进性能和可用性通过以如下的方式分组一些磁盘(分组为卷或虚拟磁盘)来创建RAID逻辑单元号(LogicalUnitNumber,LUN):将单个磁盘作为一个逻辑磁盘使用。在存储区域网络(StorageAreaNetwork,SAN)出现之前,LUN就是磁盘驱动器地址(编号)。因此,在正常操作期间,第3章磁盘实现方法和ASM(针对DBA)59一个逻辑设备可以得益于它背后的多个物理设备。这意味着更为快速的数据访问(在适当地配置时)和容量远大于单个设备物理限制的存储卷。如果一个磁盘失败并且这个磁盘上的所有数据都被破坏,此时就可以重建磁盘组,因此数据可以存储在多个位置。系统并不会因为一个磁盘故障而停止下来(在使用适当的RAID级别时)。在一个磁盘出现故障时,用户可以继续他的操作,就好像什么也没有发生一样。系统会警告系统管理员某一个磁盘发生了故障。然后管理员会取出这块磁盘并插入另一个磁盘。硬件控制器或操作系统会自动在新的磁盘上写入丢失的信息。系统会继续操作,就像没有中断一样。3.1.2所需的磁盘数量我知道处于这种情况的硬件供应商会感谢我,但实情就是如此。关于购买磁盘的经验之谈是:“不要单凭容量来购买磁盘”。如果您有一个中等规模的200GB数据库,为什么需要购买具有1TB磁盘容量的磁盘阵列?原因就在于磁盘主轴。由于单个磁盘的容量一直保持在146GB左右,合理地分布数据可能非常困难,但是近来我经常看到人们单凭容量购买磁盘,这就给这些人带来了不适当的冗余或较差的性能,或者同时产生这两种情况。除此之外,在正确地配置1TB的磁盘之后,您可能只有500GB的可用存储空间,其他的300GB容量用来执行各种有用的操作。至于具体的操作,使用SAN就是应该最先执行的操作。为什么不投资在可以给多个系统带来益处的硬件上?本章后面将对此进行介绍。3.1.3可用的RAID级别当前几乎每个中等规模的服务器或企业级的服务器都提供了硬件RAID解决方案,这种解决方案内置在服务器中,或者作为附加的存储设备。使用各种可用的RAID级别已经变成一个通用标准,而不管购买的是什么类型的阵列。下文列出了Oracle数据库管理员需注意的一些较为常用的选项:●RAID0(分段集)这个级别允许自动磁盘分段(striping)。这意味着Oracle的数据文件可以自动扩展到多个磁盘上。表空间所对应的数据文件片断可以同时扩展到多个磁盘(而不是一个磁盘)上,并可同时对它们进行访问(节省了大量的磁盘I/O)。需要注意的是,这不是高可用性或容错的解决方案,因为磁盘组中某个磁盘的丢失意味着需要恢复所有的数据。●RAID1(镜像集)现在多数系统都支持自动磁盘镜像。在操作系统里也经常用到这个技术,但用在Oracle数据库中主要是想得到更高的可用性。相比于数据的数量,使用RAID1级别需要两倍的存储空间。●RAID5(带有奇偶校验的分段集)这个级别将奇偶检验块放到额外的磁盘上,这主要是为了媒介恢复。有大量读操作的应用程序都可以从这种磁盘阵列分布中获得最大的性能。这是一个低成本的解决方案,对于有大量写操作的Oracle应用程序,其效率并不高。下面的小节中将讨论这个RAID级别的改进方案。●RAID1+0(RAID10,镜像的分段)先镜像磁盘,然后对其进行分段。这是最常见的OracleOLTP产品RAID级别,也称为RAIDTEN。它通过将RAID0的磁盘I/OOracleDatabase10g性能调整与优化60分段优势融入到RAID1带来的镜像,结合了前两个RAID级别的优点。在高读/写量的环境(如OLAP)中,由于对数据的小规模访问会很频繁,我们建议使用这个级别的RAID。●RAID0+1(RAID01,分段的镜像)先分段磁盘,然后对其进行镜像。该级别通常会与RAID10混淆或者被认为不存在,它通过将RAID0的磁盘I/O分段优势提供给RAID1带来的镜像,结合了前两个RAID级别的优点。在高读/写量的环境(如OLAP)中,由于对数据的小规模访问会很频繁,使用这个RAID级别也很适合,但是它不如RAID10健壮,并且不能容忍来自不同分段的两个磁盘同时产生故障。此外,在产生故障之后的重建过程中,阵列中的所有磁盘都必须参与到重建过程中,这一点也不如RAID10令人满意。●RAID1+0+0(RAID100,RAID10的分段)先镜像磁盘,然后对其进行分段,接下来再次分段(顶层的分段通常使用软件进行操作,称为MetaLun或软分段)。这种RAID级别的优点主要是改进随机读的性能和消除热点。3.1.4更新的RAID5许多硬件供应商都使用RAID5配置来配置系统,从而充分利用磁盘上的可用空间,并且减少阵列的总体成本。尽管RAID5对于不昂贵的冗余是个很好的方案,但它对于写入密集型操作的性能来说通常较差。一般来说,当对RAID5阵列发出一个写入请求时,必须改变磁盘上已修改的块,从磁盘上读取“奇偶校验”块,并且使用已修改的块计算新的奇偶校验块,然后把数据写入到磁盘上。无论请求写入的数据为多少,这个过程都会限制吞吐量,因为对于每一个写操作,都有至少两个额外的I/O操作。建议仅在一个文件系统大部分进行的是读取操作或只读操作时使用RAID5。大多数存储器供应商都了解到这种奇偶校验写操作对性能有一定影响,并且已经提出各种解决方案来减少这种额外操作带来的影响。最常见的解决方案是在阵列上实现一个内存缓存,从而加速阵列上所有I/O的写性能。对于周期性的或少量的写活动,这种解决方案可能完全适合于您的系统,但是您需要记住这些写操作最终都需要写入到磁盘。如果由于执行大量写活动而使该磁盘缓存超载,则可能产生通常所说的“串行化I/O”情况。在这种情况中,阵列无法足够快速地写入磁盘以清除缓存,这就基本上抵消了缓存带来的优势。确保检查您的供应商可能实现的其他解决方案,主动询问他们如何处理大量的I/O。一些期待实现的解决方案如下:●动态缓存管理:这是阵列用于调整缓存使用方式的功能。一些供应商简单地将缓存对半划分——如果有1GB的缓存,则将500MB用于读,另外500MB用于写。因为Oracle缓冲区缓存基本上已经是读缓存,并且能够调整阵列缓存,因此主要通过写缓存提供一些灵活性。这种解决方案也适用于RAID5之外的其他配置。●绑定的写操作:一般来说,写操作的最大尺寸大于Oracle块的尺寸。一些供应商已经在其阵列中实现了智能化,从而这些阵列可以将多个奇偶校验操作分组到一个I/O操作中。因为需要较少的物理磁盘往返操作,当运行RAID5时,这种解决方案可以极大地改进缓存的性能和有效性。RAID6是RAID5的另一个变体,您可能已经通过广告看到过这种RAID级别。RAID第3章磁盘实现方法和ASM(针对DBA)616的运行方式类似于RAID5,不同之处在于它利用每组数据块分段对应的奇偶校验块。虽然这种RAID级别带来了更多容错的额外优势,但是您可能丢失两个磁盘,因此这种RAID级别具有甚至更低的发展潜力。我仍然会优先选择RAID1+0(镜像和分段)。RAID1+0一般比RAID5更为快速,或者至少一样快,并且对于多种设备故障自然地具有更多的容错。您可能处于磁盘具有多个物理外壳的情况,因此使用分段和镜像也可以在外壳之间构建容错。3.2安装和维护传统文件系统使用RAID配置的物理设备和传统文件系统组可以让DBA在执行Oracle数据文件安装和维护时变得更为轻松,这是因为手动均衡磁盘已经不再繁琐。随着当前的存储系统中采用大容量的磁盘,将文件系统配置划分为4到6个设备已经变成无意义的事情。除非使用涉及12个或更多物理磁盘的系统,否则将这些磁盘划分为多个逻辑磁盘设备只会带来很少的优势。即使产生大量使用两个数据文件的情况,这些数据文件在阵列上共享的缓存或主机总线适配器(HostBusAdapter,HBA)也可能是常用的磁盘访问方法。最后,根据预期的发展情况,您最终可以管理的文件系统数量会使创建的多个逻辑磁盘失去存在的意义。技巧:不要把磁盘阵列上的一个逻辑设备分割成两个文件系统。该操作看起来能够向您提供灵活性,但它也会增加必须管理的数据文件位置的数量。考虑成本为了支持镜像数据的磁盘阵列,需要较多(更多)的原始磁盘存储(对于RAID1,您可能需要双倍的磁盘空间)。尽管这可能增加最初系统的价格,但同时优点也很明显。由于上述原因,在做出关于如何配置将要购买的新存储系统的决定时,应仔细考虑保持该系统运行的投资回收率(ReturnOnInvestment,ROI)以及改进性能的价值。这就将我们导向了另一类正在变得较为流行的存储系统。因为最基本的存储阵列的容量在不断增大,公司正在寻求通过多节点访问技术利用存储空间。无论采用的实现方法是存储区域网络(StorageAreaNetwork,SAN)还是网络附加存储(Netwo