操作方法

操作指南:如何查询特定对象类的 DEFAULT 版本沿袭中添加表的行数

Last Published: October 11, 2024

描述

版本化查询的性能(响应时间)会受到需要从添加表和删除表中过滤的行数的影响。

添加表或删除表的行数达到多少会影响版本化查询性能,并没有一个确定的数值标准。 从逻辑上讲,在版本查询执行过程中,过滤增量表中的行所产生的成本会影响性能。

本文提供了一种报告机制,供管理员执行,该报表可以显示特定对象类的 DEFAULT 版本沿袭中存在的行数。

如果版本查询的性能受到增量表中行数的影响,解决方案是将所有版本与 DEFAULT 版本进行协调,或者使用 ArcObjects 方法推荐的协调顺序,仅协调那些阻止 DEFAULT 版本被压缩的版本,然后压缩数据库。 通过将增量表中的行压缩回对象类的基表,可以减少版本查询执行时的工作量,从而提高性能。

解决方案或解决方法

本文档提供的步骤演示了如何获取版本化表的 registration_id,如何在 SQL*Plus 中定义局部变量,如何通过 SQL 语句设置这些变量的值,以及如何执行一条 SQL 语句来返回以下数据:DEFAULT 版本沿袭的增量表中的行数、DEFAULT 版本沿袭的添加表和删除表的行数百分比,以及添加表和删除表的总行数。

以下示例的目标是了解要素类 Primary Overhead 在 DEFAULT 版本沿袭的增量表中包含多少行数据。

  1. 首先,确定报表中使用的版本化表的 registration_id。 可以使用 SQL*Plus 对 ArcSDE 的 table_registry 表执行查询,获取表的 registration_id 值。
SQL> SELECT registration_id
2 FROM sde.table_registry
3 WHERE owner = 'ADMIN' AND table_name = 'PRIMARYOH';

REGISTRATION_ID
---------------
67
  1. 在 SQL*Plus 中定义并设置局部变量,这些变量将作为绑定变量用于生成报表的 SQL 语句中。
    • 声明变量及其类型:
SQL> VARIABLE lineage_id NUMBER;
SQL> VARIABLE lineage_name NUMBER;
    • 设置每个变量的值:
SQL> BEGIN
2 SELECT state_id INTO :lineage_id FROM sde.versions WHERE owner = 'SDE' AND name = 'DEFAULT';
3 END;
4 /

PL/SQL procedure successfully completed.

SQL> BEGIN
2 SELECT lineage_name INTO :lineage_name FROM sde.states WHERE state_id = :lineage_id;
3 END;
4 /

PL/SQL procedure successfully completed.
  1. 执行 SQL 语句以报告表的统计信息。 请注意,在 SQL 语句中,Primary Overhead 表的 registration_id 值 67 必须指定为添加表 (a67) 和删除表 (d67)。
    • 要查询添加表中的更改数量,请执行以下语句:
SQL> SELECT
2 (SELECT COUNT(*) FROM admin.a67
3 WHERE sde_state_id IN
4 (SELECT lineage_id FROM sde.state_lineages
5 WHERE lineage_name = :lineage_name AND lineage_id <= :lineage_id)) AS "NUMBER OF ROWS",
6 ROUND((SELECT COUNT(*) FROM admin.a67
7 WHERE sde_state_id IN
8 (SELECT lineage_id FROM sde.state_lineages
9 WHERE lineage_name = :lineage_name AND lineage_id <= :lineage_id))
10 /(SELECT COUNT(*) FROM admin.a67) * 100, 2) AS "PERCENTAGE OF ROWS",
11 (SELECT COUNT(*) FROM admin.a67) AS "TOTAL ROWS"
12 FROM dual;

NUMBER OF ROWS PERCENTAGE OF ROWS TOTAL ROWS
-------------- ------------------ ----------
17413 26.78 65032
    • 要查询删除表中相同的信息,请执行以下语句:
SQL> SELECT
2 (SELECT COUNT(*) FROM admin.d67
3 WHERE deleted_at IN
4 (SELECT lineage_id FROM sde.state_lineages
5 WHERE lineage_name = :lineage_name AND lineage_id <= :lineage_id)) AS "NUMBER OF ROWS",
6 ROUND((SELECT COUNT(*) FROM admin.d67
7 WHERE deleted_at IN
8 (SELECT lineage_id FROM sde.state_lineages
9 WHERE lineage_name = :lineage_name AND lineage_id <= :lineage_id))
10 /(SELECT COUNT(*) FROM admin.d67) * 100, 2) AS "PERCENTAGE OF ROWS",
11 (SELECT COUNT(*) FROM admin.d67) AS "TOTAL ROWS"
12 FROM dual;

NUMBER OF ROWS PERCENTAGE OF ROWS TOTAL ROWS
-------------- ------------------ ----------
16361 27.09 60384

文章 ID: 000010102

接收通知并查找新问题或常见问题的解决方案

从我们全新的 AI 聊天机器人中获得简明答案和视频解决方案。

下载 Esri 支持应用程序

发现关于本主题的更多内容

获取来自 ArcGIS 专家的帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项