ArcGIS 不要求用户更改 Oracle 实例的默认配置,实例可在默认设置情况下运行。然而,对于大型系统,最好对 Oracle 实例配置进行一些必要的更改。
无论何时启动 Oracle 实例,Oracle 都将从 init.ora 文件或服务器参数文件 spfile.ora 读取其初始化参数。虽然这两种文件都定义实例的特征,但它们的管理方式却不同。
init.ora 文件位于 ORACLE_BASE/admin/<ORACLE_SID>/pfile 目录或文件夹下。通常,init.ora 是赋给 Oracle 数据库实例的初始化文件的名称,但对于任何给定的实例,该文件名实际上是 init<oracle SID>.ora。例如,如果 Oracle 系统 ID (SID) 为 GIS,则该实例的 init.ora 文件将是 initGIS.ora。
如果已通过该方法启动实例,则使用 ALTER SYSTEM 命令更改参数将自动作用到服务器参数文件中。通过 init.ora 文件启动实例后,如果您想让对系统参数所做的更改不只影响数据库的当前实例,则必须使用文本编辑器手动编辑该文件。
针对在 Oracle 中实施大型、频繁使用的地理数据库时设置参数提出以下建议:
影响共享内存的参数
本部分介绍了一部分控制共享内存分配的参数。有关 Oracle 初始化参数的详细论述,请参阅您的 Oracle 版本的 Oracle 文档。
OPEN_CURSORS
Oracle 初始化参数 OPEN_CURSORS 指定在任何时刻会话可同时打开的游标数。默认值为 300。如果会话尝试打开新游标,但此时已达到可打开游标数的最大值,那么将返回 Oracle 错误 -1000。ArcGIS 保留那些打开的、频繁执行的游标以提高性能。如果 Oracle OPEN_CURSORS 参数值设置得不够大,则将遇到上面提到的错误。Oracle 文档指出,给该参数设置非常大值不会产生不利影响。因此,可以设置非常大的值,例如,设置为 2000;从实用的角度来看,这样做即可有效地消除对打开游标数的限制,但同时又能提供一种保护措施,防止流氓进程尝试消耗过量的游标资源。相反,如果要计算会话可能打开的游标数,那么根据组织的数据模型,可将下面的公式作为指导。请记住,ArcGIS 将打开占指定数量 80% 的打开游标,这可使 Oracle 进程使用其余的 20%。
- 各种 ArcGIS 数据管理游标 (20) +
- 各种匿名 PL/SQL 块 (20) +
- 空间查询 - 可能每个要素类 6 个 +
- 日志文件查询 (11) +
- 编辑版本化表时使用的其他查询 - 每个版本化表或图层 12 个
因此,如果在 ArcMap 中编辑 10 个图层,则可能会打开 231 个游标 (20 + 20 + 60 + 11 + 120 = 231)。此时,300 OPEN_CURSORS 的默认设置已足够,因为 ArcGIS 在此设置下会保留打开的 240 个游标。然而,如果发现游标经常不够用,则可以 50 或 100 为增量增大 OPEN_CURSORS 参数值。
SESSION_CACHED_CURSORS
Oracle 监视提交给每个会话的 SQL 语句。如果 Oracle 检测到多次提交同一条语句,Oracle 便会将该语句移动到游标缓存并保持该游标处于打开状态,以便以后再用。SESSION_CACHED_CURSORS 参数控制着可添加到游标缓存中的游标数。SESSION_CACHED_CURSORS 的默认值随 Oracle 版本的不同而异。如果实例没有配置为至少缓存 50 个游标,则将该参数值增大到 50。
SESSIONS
将地理数据库配置为允许与地理数据库建立无限制连接。如果您要与地理数据库建立大量并发连接,则可能需要更改 Oracle 的 SESSIONS 参数以适应新的设置。
SESSIONS 参数直接限制 Oracle 允许的总并行会话数。如果默认值不足以支持预期的地理数据库连接数,请将该参数的值增大为预期的当前连接数,再在此基础上至少增大 10%,以支持内部 Oracle 函数。
PROCESSES
您还可以使用 PROCESSES 参数限制 Oracle 可创建的最大进程数。使用专用服务器配置时,此过程大致相当于数据库支持的并行会话数。请确保对于一组典型的 Oracle 后台进程,PROCESSES 参数值至少等于预期的地理数据库并发连接数加 25。
影响 Oracle 统计数据的参数
OPTIMIZER_MODE
保持 Oracle 参数 OPTIMIZER_MODE 的默认值 (all_rows) 不变。对于多数地理数据库,此设置最为合适,并且可提高地理数据库的整体可扩展性。
影响内存的参数
设置影响内存的初始化参数时必须格外小心。给这些参数设置大于主机物理内存资源强加的限值将导致性能明显降低。通常,不应将 70% 以上的服务器物理内存分配给服务器上的数据库。
SHARED_POOL_SIZE
共享池是 Oracle 系统全局区 (SGA) 的组成部分,它存储数据字典缓存和库缓存。数据字典缓存存储有有关数据对象、可用空间和权限的信息。库缓存存储最近解析的 SQL 语句。通常,如果共享池足够大可以满足库缓存的资源要求,也就说明共享池足够大可以存储数据字典缓存。
地理数据库可以从利用比一些其他 Oracle 应用程序更大的共享池中获益。ArcGIS 可以将客户端应用程序提交的 SQL 语句的缓存保存在内存中。使用大型共享池时可以有更多的游标处于打开状态,从而能减少游标管理操作并提高性能。共享池的大小由 SHARED_POOL_SIZE 参数控制。Esri 建议将 SHARED_POOL_SIZE 参数值设置为 16 MB 的倍数以适合 Esri 支持的所有系统,还有将此参数值至少设置为 128 MB:
shared_pool_size = 128,000,000
支持易失性工具或宗地编辑系统且高度活跃的地理数据库可能需要 SHARED_POOL_SIZE 设置为高达 250 MB。
在这三个 SGA 缓冲区中,共享池最重要。如果 SGA 大小已达到可给其分配的最大物理内存大小,则减小缓冲器高缓大小以适应更大的共享池。
使用自动工作区和共享内存管理
应该利用 Oracle 提供的机制来自动管理工作区和内存分配。有关如何配置工作区和内存管理的信息,请参阅当前所使用 Oracle 版本的《Oracle 数据库管理员指南》(Oracle's Database Administrator's Guide)。
其他更改
虽然不是初始化参数,但可以将 UNDO_POOL 数据库资源管理器计划指令设置为允许 sde 用户的用户组使用大量的撤消空间进行压缩操作。
要使用此功能,您需要建立 sde 用户的用户组,然后将 UNDO_POOL 计划指令更改为允许此用户组使用无限制撤消池。
UNDO_POOL 标识一个资源组的成员可以同时共同分配的撤消空间的总量。
编辑版本化地理数据库时,必须定期执行压缩操作以清除旧信息并精简地理数据库中的内容。如果上次执行压缩操作后出现大量编辑内容,那么新的压缩过程将创建需要大量撤消空间的大型事务。如果 UNDO_POOL 设置得过低,压缩操作将失败,性能将变差。如果可能,为 sde 用户的用户组设置一个无限制撤消池。否则,必须监视压缩事务的大小,并对大型撤消池选择一个合适的大小。