ArcGIS 10.2 Query Layer sobre el rendimiento de SQL Server

10

Estoy usando una capa de consulta en SQL Server en ArcMap. La capa de consulta se ejecuta instantáneamente en SQL Server, pero tarda tanto en dibujar en ArcMap que el sistema no responde durante unos 10 minutos o más. Durante el sorteo de ArcMap, una de las CPU se maximiza en el proceso de SQL Server.

Mi consulta son las intersecciones STI de un búfer en una entidad de línea (Shannon) contra una clase de entidad de polígono (Townlands), como sigue;

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

La consulta devuelve 186 filas al instante. Estos se pueden dibujar en el panel espacial de SQL Server Management Studio sin ningún problema

Cuando construyo una capa de consulta en ArcMap con exactamente la misma sintaxis, el sistema deja de responder pero eventualmente dibuja. Parece que, tal vez, ArcMap no está utilizando el índice espacial o lo está haciendo diferente de SQL Server, lo que provoca una consulta ineficiente en SQL Server que tarda en volver.

¿Alguien puede aconsejar sobre un remedio?

Gracias

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

Respuestas:

3

Como indicó, su consulta parece ejecutarse rápidamente en el nivel de la base de datos. Incluso si pudiera hacer que el SQL sea más eficiente, el rendimiento real está en el nivel espacial.

Las declaraciones SQL espaciales, como la que está utilizando, se permitieron recientemente con la introducción del tipo de geometría. SQL Server 2008 para ArcSDE admite tres tipos de datos de geometría, SDEBINARY, GEOMETRY y GEOGRAPHY. Las diferencias se enumeran aquí.

Para obtener el mejor rendimiento, asegúrese de estar utilizando la Geometría o la Geografía (no SDEBINARY, ya que es obsoleta y no se recomienda) en función de la naturaleza de sus datos, ya sea que esté utilizando la referencia espacial de la Tierra o no. También asegúrese de reconstruir el índice espacial en la clase de características TOWNLANDS. Puede hacerlo desde ArcCatalog haciendo clic derecho en la clase de entidad, propiedades y seleccionando la pestaña de índices.

Espero que ayude.

hnasr
fuente
1

No veo en su consulta la necesidad de hacer una unión. Intente usar WHERE en su lugar.

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

En la consulta original, la combinación no pareció beneficiar el resultado; No vi ninguna columna de la tabla de Shannon en la línea de selección. Por lo tanto, parece un trabajo extra.

Jimmyjak
fuente
¡Bienvenido a GIS SE! Su respuesta es muy breve, así que para ayudar a este Asker y a los lectores posteriores, ¿podría usar el botón de edición para ampliar lo que sugiere, por favor?
PolyGeo
1

Esta es una limitación conocida del uso de ArcGIS con SQL Server que, por lo que sé, no tiene una solución simple.

Si el planificador de consultas de SQL Server decide que necesita más de una CPU para ejecutar la consulta, las probabilidades de que se utilice el índice espacial son bajas.

Microsoft es consciente del problema, pero no tiene prisa por mejorar el planificador de consultas porque afectaría a todas las consultas, no solo a las espaciales.

La única solución confiable es establecer su grado máximo de paralelismo (MAXDOP) en su base de datos a 1, pero esto significa que todas las consultas en ese DB solo usarán 1 CPU por consulta, lo que ralentizará todo.

Crear una vista que represente la tabla y fuerce la sugerencia de índice espacial no funciona, ya que ArcGIS necesita consultar los metadatos y las estadísticas de la tabla, y dicha vista elimina esas consultas.

menos34
fuente
0

Tengo un problema similar. Tengo una clase de entidad almacenada en SQL Server como tipo de geometría. Tiene 30 millones de registros y se dibuja bien, pero si crea una vista vinculada a una segunda tabla, esta vista se bloquea y no se mostrará.

La tabla tiene un montón de clases de relación adjuntas. ¿Esto afectará el rendimiento de la consulta / dibujo?

También puede señalarme en la dirección del reconocimiento de Microsoft de este problema. ¿Puedo forzar al planificador de consultas a usar el índice espacial?

Cuenta

Bill Honey
fuente
Por favor haga una nueva pregunta.
Mapperz