HOW TO

Ermitteln der Anzahl der Zeilen in der Adds-Tabelle für die DEFAULT-Version-Lineage einer bestimmten Objektklasse

Last Published: October 11, 2024

Beschreibung

Die Performance (Antwortzeit) einer versionierten Abfrage kann durch die Anzahl der Zeilen, die aus der Adds- und der Deletes-Tabelle gefiltert werden müssen, beeinträchtigt werden.

Es gibt keine festgelegte Anzahl von Zeilen in der Adds- oder Deletes-Tabelle, ab der die Performance einer versionierten Abfrage beeinträchtigt wird. Logischerweise wirkt sich das Filtern von Zeilen in den Delta-Tabellen während der Ausführung der Versionsabfrage nachteilig auf die Performance aus.

In diesem Artikel wird ein Berichtsmechanismus beschrieben, mit dem der Administrator einen Bericht ausführen kann, der anzeigt, wie viele Zeilen in der Lineage der DEFAULT-Version für eine bestimmte Objektklasse vorhanden sind.

Wenn die Performance der Versionsabfrage durch die Anzahl der Zeilen in den Delta-Tabellen beeinträchtigt wird, besteht die Lösung darin, alle Versionen mit der DEFAULT-Version abzugleichen. Alternativ kann die ArcObjects-Methode für die empfohlene Abgleichreihenfolge verwendet werden, um nur die Versionen, die die Komprimierung der DEFAULT-Version verhindern, abzugleichen und die Datenbank zu komprimieren. Dadurch, dass die Zeilen in den Delta-Tabellen zurück in die Basistabelle der Objektklasse komprimiert werden können, ist die Ausführung der Versionsabfrage weniger aufwändig, wodurch sich die Performance verbessert.

Lösung oder Problemumgehung

In den Anweisungen wird beschrieben, wie Sie die "registration_id" einer versionierten Tabelle abrufen, lokale Variablen in SQL*Plus definieren, die Variablenwerte aus einer SQL-Anweisung festlegen und eine Anweisung ausführen, um die Anzahl der Zeilen in den Delta-Tabellen für die Lineage der DEFAULT-Version, den Prozentsatz der Zeilen in der Adds- und der Deletes-Tabelle für die Lineage der DEFAULT-Version und die Gesamtzahl der Zeilen in der Adds- und der Deletes-Tabelle zurückzugeben.

Im folgenden Beispiel soll ermittelt werden, wie viele Zeilen in der Lineage der DEFAULT-Version für die Delta-Tabellen der Feature-Class "Primary Overhead" vorhanden sind.

  1. Identifizieren Sie die "registration_id" für die versionierte Tabelle, die im Bericht verwendet wird. Mit SQL*Plus ist es möglich, eine Abfrage für die ArcSDE-table_registry auszuführen, um den registration_id-Wert einer Tabelle abzurufen.
SQL> SELECT registration_id
2 FROM sde.table_registry
3 WHERE owner = 'ADMIN' AND table_name = 'PRIMARYOH';

REGISTRATION_ID
---------------
67
  1. Definieren Sie die lokalen Variablen, die als Bind-Variablen in der SQL-Anweisung zum Generieren des Berichts verwendet werden, und legen Sie sie in SQL*Plus fest.
    • Deklarieren Sie die Variablen und ihre Typdefinitionen:
SQL> VARIABLE lineage_id NUMBER;
SQL> VARIABLE lineage_name NUMBER;
    • Legen Sie die Werte der einzelnen Variablen fest:
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. Führen Sie die SQL-Anweisung aus, um einen Bericht der Tabellenstatistiken zu erstellen. Beachten Sie, dass der registration_id-Wert (67) der Tabelle "Primary Overhead" in der SQL-Anweisung als Adds-Tabelle (a67) und Deletes-Tabelle (d67) angegeben werden muss.
    • Um die Anzahl der Änderungen in der Adds-Tabelle zu ermitteln, führen Sie die folgende Anweisung aus:
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
    • Um die gleichen Informationen für die Deletes-Tabelle zu generieren, führen Sie die folgende Anweisung aus:
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

Artikel-ID: 000010102

Holen Sie sich Unterstützung mit KI

Lösen Sie Ihr Problem schnell mit dem Esri Support AI Chatbot.

Beginnen Sie jetzt mit dem Chatten

Weitere Informationen zu diesem Thema erkunden

Unterstützung durch ArcGIS-Experten anfordern

An den technischen Support wenden

Beginnen Sie jetzt mit dem Chatten

Zu Download-Optionen wechseln