ArcGIS 10.2-Abfrageebene für die Leistung von SQL Server


10

Ich verwende eine Abfrageebene unter SQL Server in ArcMap. Die Abfrageebene wird sofort in SQL Server ausgeführt, das Zeichnen in ArcMap dauert jedoch so lange, dass das System etwa 10 Minuten oder länger nicht mehr reagiert. Während des ArcMap-Zeichnens wird diejenige der CPUs im SQL Server-Prozess maximal genutzt.

Meine Abfrage ist die STIntersects eines Puffers in einem Linien-Feature (Shannon) gegen eine Polygon-Feature-Class (Townlands) wie folgt;

SELECT TOWNLANDS.TL_ID,TOWNLANDS.Shape FROM dbo.TOWNLANDS as townlands
with(index(FDO_Shape)) 
JOIN dbo.Shannon on townlands.Shape.STIntersects 
(Shannon.Shape.STBuffer(2.0))=1

Die Abfrage gibt sofort 186 Zeilen zurück. Diese können problemlos im räumlichen Bereich von SQL Server Management Studio gezeichnet werden

Wenn ich in ArcMap eine Abfrageebene mit genau derselben Syntax erstelle, reagiert das System nicht mehr, zeichnet aber schließlich. Es sieht so aus, als würde ArcMap den räumlichen Index möglicherweise nicht verwenden oder unterscheidet sich von SQL Server, was zu einer ineffizienten Abfrage in SQL Server führt, deren Rückgabe einige Zeit in Anspruch nimmt.

Kann jemand über ein Heilmittel beraten?

Vielen Dank

ArcGIS Desktop: 10.2
ArcSDE: 10.2
RDBMS: Database and version: SQL Server 2008
OS: Windows Server 

Antworten:


3

Wie Sie bereits sagten, scheint Ihre Abfrage auf Datenbankebene schnell ausgeführt zu werden. Selbst wenn Sie SQL effizienter gestalten konnten, liegt die tatsächliche Leistung auf räumlicher Ebene.

Räumliche SQL-Anweisungen, wie die von Ihnen verwendete, wurden erst kürzlich mit der Einführung des Geometrietyps zugelassen. SQL Server 2008 für ArcSDE unterstützt die drei Geometriedatentypen SDEBINARY, GEOMETRY und GEOGRAPHY. Die Unterschiede sind hier aufgelistet

Stellen Sie für eine optimale Leistung sicher, dass Sie die Geometrie oder Geografie verwenden (jedoch nicht SDEBINARY, da sie veraltet und nicht empfohlen ist), basierend auf der Art Ihrer Daten, unabhängig davon, ob Sie einen Erdraumbezug verwenden oder nicht. Stellen Sie außerdem sicher, dass Sie den räumlichen Index für die Feature-Class TOWNLANDS neu erstellen. Sie können dies in ArcCatalog tun, indem Sie mit der rechten Maustaste auf die Feature-Class und die Eigenschaften klicken und die Registerkarte Indizes auswählen.

Hoffentlich hilft das.


1

Ich sehe in Ihrer Anfrage nicht die Notwendigkeit, einen Join durchzuführen. Versuchen Sie stattdessen WHERE.

SELECT TOWNLANDS.TL_ID,TOWNLANDS.Shape 
FROM dbo.TOWNLANDS as townlands
with(index(FDO_Shape)) 
WHERE townlands.Shape.STIntersects 
(Shannon.Shape.STBuffer(2.0))=1

In der ursprünglichen Abfrage schien der Join für das Ergebnis keinen Nutzen zu haben. Ich habe keine Spalten aus der Shannon-Tabelle in der Auswahlzeile gesehen. Daher scheint es zusätzliche Arbeit zu sein.


Willkommen bei der GIS SE! Ihre Antwort ist sehr kurz. Um diesem Asker und späteren Lesern zu helfen, können Sie die Schaltfläche "Bearbeiten" verwenden, um Ihre Vorschläge zu erweitern.
PolyGeo

1

Dies ist eine bekannte Einschränkung bei der Verwendung von ArcGIS mit SQL Server, für die meines Wissens keine einfache Lösung verfügbar ist.

Wenn der SQL Server-Abfrageplaner entscheidet, dass mehr als eine CPU zum Ausführen der Abfrage erforderlich ist, ist die Wahrscheinlichkeit gering, dass der räumliche Index verwendet wird.

Microsoft ist sich des Problems bewusst, hat es jedoch nicht eilig, den Abfrageplaner zu verbessern, da dies alle Abfragen betreffen würde, nicht nur die räumlichen.

Die einzig zuverlässige Lösung besteht darin, den maximalen Parallelitätsgrad (MAXDOP) für Ihre Datenbank auf 1 zu setzen. Dies bedeutet jedoch, dass alle Abfragen in dieser Datenbank nur 1 CPU pro Abfrage verwenden, was alles verlangsamt.

Das Erstellen einer Ansicht, die die Tabelle darstellt und den räumlichen Indexhinweis erzwingt, funktioniert nicht, da ArcGIS die Metadaten und Statistiken der Tabelle abfragen muss und eine solche Ansicht diese Abfragen beendet.


0

Ich habe ein ähnliches Problem. Ich habe eine Feature-Class in SQL Server als Geometrietyp gespeichert. Es enthält 30 Millionen Datensätze und seine Zeichnungen sind in Ordnung. Wenn Sie jedoch eine mit einer zweiten Tabelle verknüpfte ANSICHT erstellen, hängt diese ANSICHT und wird nicht angezeigt.

Der Tabelle sind zahlreiche Beziehungsklassen zugeordnet. Beeinflussen diese die Abfrage- / Zeichnungsleistung?

Können Sie mich auch auf die Anerkennung dieses Problems durch Microsoft hinweisen? Kann ich den Abfrageplaner zwingen, den räumlichen Index zu verwenden?

Rechnung


Bitte stellen Sie eine neue Frage.
Mapperz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.