最大程度降低 Oracle 中的磁盘 I/O 争用情况
在地理数据库的所有可配置组件中,最为频繁和广泛的自定义组件或许就是存储组件。同样,基于过去成功证实的研究和技术,每个数据库管理员 (DBA) 都拥有一种对 Oracle 数据库的逻辑和物理存储结构进行组织的首选方法。
您可以非常灵活地设计您的地理数据库存储模型,以满足数据、应用程序和现有管理策略方面的特定要求。ArcSDE 对存储条件几乎没有任何严格的要求。您可以选择将 GIS 数据部署在具有单个数据磁盘和一个表空间的入门级计算机上,也可以选择部署在具有数十个磁盘阵列和上百个 Oracle 文件的高端服务器上,而不管采用哪种部署方式,都可以成功地支持其预期环境。幸运的是,无论用于运行您的地理数据库的是何种资源,ArcSDE 和 Oracle 均可对其加以利用。
要最大程度地降低 Oracle 数据库的磁盘 I/O 争用情况,可在可能的情况下将经常访问的文件置于单独的磁盘中,并在这些磁盘中对经常访问和不经常访问的文件进行分组。要执行此操作,
- 估计所有数据库组件的大小,并确定其相对访问率。
- 根据磁盘可用空间和磁盘驱动器的大小和数量,对组件进行安置。
用图解法表示磁盘驱动器并以组件对其进行标注,以辅助追踪各组件的位置。创建数据库时应保证可随时参考该图解。
关于如何避免存储在 Oracle 中的 ArcSDE 地理数据库出现资源争用情况,下面列出了一些建议。有关此处讨论的 Oracle 组件的说明(例如表空间和段),请参阅 Oracle 文档。
- 使数据库的设计尽可能简单。
这并不意味着设计本身就必须简单,而是说只有在要建模的数据非常复杂时才可进行复杂的设计,而不能草率地作出决定。以单个表空间为起始点设计您的地理数据库,之后对创建的每个附加表空间进行调整并记录。将每个表空间的用途记入文档不仅对将来使用系统的人员(包括您自己)有所帮助,同时也会强制您更加深入地考虑每个附加表空间所能带来的好处。
- 将系统段与用户段分隔。
将用户段(例如要素类)和系统段(例如 ArcSDE 和 Oracle 数据字典)分隔开来不仅可简化配额管理,而且可避免产生会导致性能下降的碎片。此外,如果对这些段分别进行存储,逻辑上也更便于监听表空间级别的活动。
- 分隔不同项目的数据。
对不同的项目、部门或其他逻辑实体分别使用专门的表空间会对监听和管理有所帮助。对一个项目的表空间产生影响的恢复操作不会导致其他项目出现异常。您可以将一组表空间中的配额无限制地分配给一个部门中的用户,而不会产生耗尽其他部门所需空间的风险。如果这些实体都使用自己的表空间,则便可更加容易地将 I/O 活动和文件增长与特定的团队或个体连接起来。
- 分割大型段与小型段。
您不仅可在段级别强制范围大小,而且可在表空间级别上强制范围大小。对表空间中的所有段使用统一的范围大小可去除可用空间碎片,并且还可提高性能。但是,这需要根据范围大小对段进行分组,以平衡每段中范围的数量,而范围大小过大便会导致空间浪费。比较合理的范围大小的为:较小的表使用 128 KB 的范围大小,较大的要素类使用 1 MB 的范围大小,而更大的栅格则使用 128 MB 的范围大小,但您仍然可根据自己的环境和研究自定义这些值。
- 分隔只读数据与可写数据。
如果一个表空间所包含的数据全部是只读数据,则可将该表空间明确设置为只读模式。这样便可降低需定期备份的数据量。只读数据文件也非常适合存储在独立磁盘冗余阵列 (RAID) 5 的阵列中,因为这些文件的读取过程可得益于条带化,而且由于它们为只读文件,所以不会由于过多的写入活动而导致阵列性能降低。
- 使用多个磁盘或阵列存储文件。
对于控制文件、联机重做日志和归档重做日志等重要的 Oracle 文件,应使用 Oracle 软件进行多路复用(或镜像),以实现最大程度的保护。
即使是在具有单卷存储阵列的服务器上,通常也配有独立的内部磁盘以存储操作系统、页面文件和 ArcSDE 与 Oracle 可执行文件。此磁盘可用来存储多路复用控制文件和重做日志文件。警告:控制文件存储着关键的信息,例如加入到数据库的文件的列表。联机重做日志和归档重做日志文件记录数据库的更改情况,以备恢复所用。如果没有这些文件的最新复本,则很难或根本无法完全恢复数据库。
-
如果采用 RAID 存储,则应使用适当的 RAID 类型。
RAID 是一类存储管理服务。通用 RAID 策略有若干种。这些策略以数值或 RAID 级别表示。具体策略如下:RAID 0(或条带化)可将同一文件系统的多个小部分,以被称为条带的单元的形式存储在多个物理磁盘中。条带化的优点在于可提高性能。通过将文件系统中的内容散布到多个设备中,RAID 控制器便可同时在多个磁盘中进行读取和写入。RAID 0 的缺点是,如果 RAID 0 阵列中有一个磁盘离线,则整个阵列将不可用。
RAID 1(或镜像)可将写入一个磁盘的所有内容以复本的形式存储在另一个磁盘中。镜像的优点在于可对数据提供保护。发生故障时,即使有一个磁盘失效,也不会造成数据丢失及服务受阻。因此,RAID 1 可用于多种地理数据库,尤其是那些对可用性要求较高的地理数据库。镜像的缺点是成本较高。由于对数据存储两次,所以与独立磁盘或条带化磁盘策略相比,这种策略存储同样的信息需要两倍的磁盘空间。因为需要写入复本数据,所以也会造成较小程度的写入性能损失。RAID 10(或 RAID 1+0)结合了 RAID 1 和 0 二者的优点。RAID 10 阵列会在镜像磁盘组中分条带存储数据。这样既可实现 RAID 0 的性能优势,又可实现 RAID 1 的数据保护优势。RAID 10,以及各供应商基于 RAID 10 策略所采取的特定的实施方法,可使繁忙的地理数据库达到最佳的 I/O 性能。
RAID 10 的运行成本较高,因为该策略需要额外的硬件来存储镜像数据。您可以考虑有选择性地使用 RAID 10,从而为使用最为频繁的文件提供保护,并使其具有较高的性能,而对于只读、存档的或不经常更改的数据,则可选择其他的 RAID 或独立配置。当然,如果不必考虑成本,那么可对所有数据库存储应用 RAID 10 策略。不然,则需考虑结合不同的 RAID 策略和独立磁盘配置,以在处理中使硬件达到最佳的可靠性和性能。对于需要频繁写入的文件,应尽量存储在 RAID 1 或 RAID 10 设备上。这样的文件包括重做日志和用于撤消表空间的数据文件。如有必要,可使用具有 Oracle 多路复用和全面备份策略的独立磁盘。
RAID 5(也称为旋转同位元的条带化)在整个阵列中仅需要相当于一个附加磁盘的空间来存储冗余信息。要实现此目的,RAID 5 会在多个磁盘中分条带存储数据,然后将整个条带的同位元信息存储为一个附加区块。如果阵列中有一个磁盘离线,则 RAID 处理器可依靠其他磁盘和同位元信息重新构建所丢失的数据。条带化的应用使得 RAID 5 的读取性能有所改善,而使用同位元信息(而不是进行完全镜像)可实现低成本冗余,这些都是 RAID 5 的优点。由于对于地理数据库的读取往往是较为频繁的,因此 RAID 5 非常适合地理数据库应用程序,尤其是当可用性具有较高要求时。
但是,由于 RAID 5 并不会存储完全冗余信息,所以其与 RAID 10 相比其更容易受到数据丢失的影响。尽管很少会发生此类情况,但是如果 RAID 5 阵列中有两个磁盘同时离线,则该阵列中所具有的剩余信息便不足以重新构建丢失的数据,从而势必会导致整个卷都离线。在以下两种情况下,性能也会受到影响。第一,当向阵列中写入数据时,必须同时计算并保存同位元信息。第二,当一个驱动器离线时,读取和写入的性能会大幅下降,因为 RAID 处理器会同时动态地重新构建该离线磁盘的数据。对于非常活跃的地理数据库,在发生这些事件的过程中可用的吞吐量可能会不足,从而使所提供的服务无法达到可接受水平。
- 使用 Oracle 自动存储管理。
Oracle 10g 引入了自动存储管理 (ASM) 功能。实际上,ASM 是为对 Oracle 数据库进行服务而专门优化并设立的 RAID 系统。ASM 可使用 Oracle 实例将数据 I/O 请求安排到一组其被作为磁盘组进行管理的原始分区中。磁盘组可实现条带化、镜像,以及被称为高冗余的特殊镜像,该镜像将存储三套数据复本,而不是正常情况下的两套。
- 对于只读数据使用较小的 PCTFREE 值。
Oracle 允许您在向表中插入新数据时,在每个数据块中保留一定量的可用空间。达到数据块的可用空间限值后,Oracle 将不会再向该块内插入更多数据。此可用空间仅可供存储在该块中现有行作更新之用。通过仅为更新操作保留的空间,便可防止出现各行在其原始块中超出可用空间而不得不迁移到新块中的情况。无论是在更新时还是在进行查询之类的后续操作时,对行进行迁移终究是一种代价较高的操作。
许多地理数据库都不会频繁进行更新,其中有的是因为表是静态的(对于栅格来说,经常是这种情况),而有的则是因为在版本化工作流中对其进行编辑,这便表示实际的更新操作被许多删除和插入操作所替代。
因此,为了最大化用来存储地理数据库数据的每个块的空间量,会通过设置 DBTUNE 存储字符串中的 PCTFREE 0 子句来将 ArcSDE 预配置为不保留可用空间。如果希望通过自定义应用程序对 SQL 的更新保留可用空间,则可在默认 DBTUNE 配置中更改 PCTFREE 值。要了解更多有关 DBTUNE 配置的信息,请参阅什么是 DBTUNE 表?、什么是 DBTUNE 配置关键字和参数?,以及 Oracle 中的 DBTUNE 配置参数。