地理数据库压缩可从对版本以及版本化编辑进行跟踪的系统表中移除不必要的状态和行。
什么是地理数据库压缩?
压缩可移除某版本不再引用的状态,还可将增量表中的行移动到业务表中。只有地理数据库管理员才能压缩地理数据库,但是压缩可以针对地理数据库中的所有状态进行操作,与版本所有者无关。
压缩很有必要,因为随着地理数据库不断被编辑,增量表的大小和状态的数量也会不断增加。表越大、状态越多,每次显示或查询版本时 ArcGIS 所必须处理的数据就越多。因此,对性能的最大影响不是版本的数量,而是增量表中对每个版本的更改量。因此,各个版本就可能具有不同的查询响应时间。
要维护数据库性能,地理数据库管理员必须定期进行压缩,以移除未使用的数据。
压缩过程中会发生什么?
压缩首先会将实例的状态树配置扫描至内存。使用此信息,压缩将删除未包含在版本谱系内的所有状态。删除某个状态将从与该状态相关联的增量表中删除所有行。
下一个步骤会将所有候选谱系的状态折叠成一种状态。候选谱系是状态的集合,这些状态可在不影响给定版本中任何表的逻辑表示的情况下,版本压缩成一种状态。
最后一步(如果适用)会将行从增量表移到基(或业务)表中。
对于每一步操作,将会针对每个正在被压缩的表启动和停止数据库事务。事务将验证每一步操作过程中各个表的一致程度。
在执行压缩时可以将其停止,因为该操作目的在于事务处理的一致程度。因此,如果操作遇到错误、失败或突然停止,则无论对于哪种版本的表示,正在压缩的版本化表在逻辑上仍然正确。可能停止压缩的一个原因是,如果在用户连接到地理数据库时正在运行压缩,将发现它会消耗大量的系统资源。在这种情况下,您可能希望先停止压缩操作,然后在连接较少用户或未连接任何用户时再运行该操作。
确保创建足够的逻辑日志,以便处理最长的事务。通常情况下,压缩地理数据库时会出现长事务。长事务高水准线百分比由 Informix onconfig 文件中的 LTXHWM 参数定义,在到达该百分比之前,必须对逻辑日志进行备份。在未经熟悉 Informix Spatial DataBlade 行为的 Informix 技术支持专家同意的情况下,不应对 LTXHWM 或 LTXEHWM 参数进行更改。如果某个事务由于到达长事务高水准线而未成功完成并且出现回滚现象,则表明您没有足够的逻辑日志。
在压缩大型地理数据库过程中,Informix 数据库会频繁地耗尽可用锁。要防止发生此情况,压缩期间需要将表以独占模式锁定。如果想使用现有用户连接进行压缩,需要在压缩期间禁用独占锁定。将 USE_EXCLUSIVE_LOCKING 配置参数设置为 false,以允许使用并发用户连接进行压缩。有关更改配置参数值的说明,请参阅更改配置关键字。
完全压缩地理数据库
在完全压缩地理数据库过程中,增量表与状态树中不会有任何行缩减为零。如果完全压缩地理数据库,则性能会得到最大的改善。要达到此目的,需执行以下操作:
- 对子版本中所有未完成的更改进行协调并将其提交到 DEFAULT 版本。作为地理数据库管理员,您可以通过打开地理数据库管理对话框版本选项卡中的协调顺序子选项卡来查看版本的默认协调顺序。有关协调顺序子选项卡的信息,请参阅版本属性。
- 重新协调并提交编辑内容之后删除版本自身。
- 确保没有用户连接。
- 执行压缩操作。
您可以在 compress_log 表中查看 ArcGIS Desktop 中各个压缩的结果。还可以在数据库中检查 versions 表来查看 DEFAULT 版本的状态 ID 是否已归零。如果已归零,并且不存在其他未完成的版本,则表明已实现完全压缩。
并不是总能够在压缩前协调、提交、删除版本以及断开所有用户的连接。例如,如果正在使用版本追踪历史记录,或需要保留某个工程的设计版本,则历史版本和设计版本会保留到状态树内的某个状态中;因此,在压缩地理数据库时,将不会移除这些状态。无需执行上述所有步骤即可成功进行版本压缩,并且某些性能仍会有所改善。
压缩频率
压缩地理数据库的频率取决于地理数据库中的编辑量。如果编辑量大,则可能应当一天压缩一次地理数据库。对于中等或较小的编辑量,应至少一周压缩一次。
压缩地理数据库之后
压缩后更新地理数据库统计数据。地理数据库管理员应更新版本管理系统表中的统计数据,各用户可以更新经过编辑的数据集中的统计数据。