地理数据库压缩可从对传统版本以及版本化编辑进行跟踪的地理数据库系统表中移除不必要的状态和行。
什么是地理数据库压缩?
压缩可移除传统版本不再引用的状态,还可将增量表中的行移动到业务表中。只有地理数据库管理员才能压缩地理数据库,但是压缩可以针对地理数据库中的所有状态进行操作,与版本所有者无关。
压缩很有必要,因为随着使用传统版本的地理数据库不断被编辑,增量表的大小和状态的数量也会不断增加。表越大、状态越多,每次显示或查询版本时 ArcGIS 所必须处理的数据就越多。因此,对性能的最大影响不是版本的数量,而是增量表中对每个版本的更改量。因此,各个版本就可能具有不同的查询响应时间。
要维护性能,地理数据库管理员必须定期压缩地理数据库,以移除未使用的数据。
压缩过程中会发生什么?
压缩首先会将实例的状态树配置扫描至内存。使用此信息,压缩将删除未包含在版本谱系内的所有状态。删除某个状态将从与该状态相关联的增量表中删除所有行。
下一个步骤会将所有候选谱系的状态折叠成一种状态。候选谱系是状态的集合,这些状态可在不影响给定版本中任何表的逻辑表示的情况下,版本压缩成一种状态。
最后一步(如果适用)会将行从增量表移到基(或业务)表中。
对于每一步操作,将会针对每个正在被压缩的表启动和停止数据库事务。事务将验证每一步操作过程中各个表的一致程度。
在执行压缩时可以将其停止,因为该操作目的在于事务处理的一致程度。因此,如果操作遇到错误、失败或突然停止,则无论对于哪种版本的表示,正在压缩的版本化表在逻辑上仍然正确。可能停止压缩的一个原因是,如果在用户连接到地理数据库时正在运行压缩,将发现它会消耗大量的系统资源。在这种情况下,您可能希望先停止操作,然后在较少用户或无任何用户连接到地理数据库时再运行该操作。
在压缩结束后,需要重新在基表上构建聚类索引,因为压缩期间可能会产生业务表碎片。
完全压缩地理数据库
在完全压缩地理数据库过程中,增量表与状态树中不会有任何行缩减为零。如果完全压缩地理数据库,则性能会得到最大的改善。要达到此目的,需执行以下操作:
- 对子版本中所有未完成的更改进行协调并将其提交到默认版本。作为地理数据库管理员,您可以通过打开 ArcMap 地理数据库管理对话框版本选项卡中的协调顺序子选项卡来查看版本的协调顺序。有关协调顺序子选项卡的信息,请参阅版本属性。
- 重新协调并提交编辑内容之后删除派生版本。
- 但请确保没有用户连接到地理数据库。
- 压缩地理数据库。
您可以在 SDE_compress_log 表中查看 ArcGIS Desktop 中各个压缩的结果。 还可以检查 SDE_versions 表来查看默认版本的状态 ID 是否已归零。 如果已归零,并且不存在其他未完成的版本,则表明已实现完全压缩。
并不是总能够在压缩前协调、提交、删除版本以及断开所有用户的连接。例如,如果正在使用版本追踪历史记录,或需要保留某个工程的设计版本,则历史版本和设计版本会保留到状态树内的某个状态中;因此,在压缩地理数据库时,将不会移除这些状态。无需执行上述所有步骤即可成功进行版本压缩,并且性能仍会有所改善。
压缩频率
压缩地理数据库的频率取决于地理数据库中的编辑量。如果编辑量大,则可能应当一天压缩一次地理数据库。对于中等或较小的编辑量,应至少一周压缩一次。
压缩地理数据库之后
压缩后更新地理数据库统计数据。地理数据库管理员应更新版本管理系统表中的统计数据,各用户可以更新经过编辑的数据集中的统计数据。