Más

¿Cómo puedo acelerar una consulta lenta de ArcGIS Server 10.2 - PostgreSQL (9.2) ST_Intersects?

¿Cómo puedo acelerar una consulta lenta de ArcGIS Server 10.2 - PostgreSQL (9.2) ST_Intersects?


Estoy solucionando un problema de una consulta lenta de st_geometry en Postgres 9.2 que usa ST_Intersects, una selección básica de la tabla donde ST_Intersects escribe la consulta.

table_extent | queryshape_extent ------------------------------------------------- ------------- + ------------------------------------ ---------------------------------- CAJA (-10942448.8275 5798114.3628, -10937877.2752 5800427.4828) | CAJA (-10942696.568988 5797982.903128, -10941159.336747 5798715.800428) (1 fila) Tiempo: 1086.008 ms

Clase de entidad de ArcGIS (world behrmann - 54017):

CREATE TABLE fe.xx_test_4 (objectid integer NOT NULL, operation_id integer NOT NULL, forma st_geometry)

También recreé la tabla y el índice espacial con geometría PostGIS para comparar, usando la misma configuración de espacio de tabla.

CREATE TABLE fe.xx_test_5 (objectid integer, operation_id integer, geometría geom)

La consulta featureclass (st_geometry) toma 23 segundos para correr y vuelve 317490 filas (de un total de 1031123 filas). No estaba seguro de si esto se podía explicar por el hecho de que estoy devolviendo el 30% de las filas.

Consulta:

seleccionar id_operación de un fe.xx_test_4, (seleccione st_geometry ( 'polígono ((-10,942,387.005869 5,798,694.633719, -10,942,175.338779 5,798,684.050364, -10,942,003.359269 5,798,684.050364, -10,941,714.962859 5,798,697.279557, -10,941,580.025089 5,798,705.217073, -10,941,378.941353 5,798,715.800428, -10,941,177.857618 5,798,543.820917, -10,941,159.336747 5,798,194.570218, -10,941,328.670419 5798096.674189, -10,941,542.983348 5,797,982.903128, -10,941,791.692179 5,797,998.778160, -10,942,000.713430 5,798,009.361515, -10,942,151.526232 5,798,019.944869, -10,942,437.276803 5,798,019.944869, -10,942,561.631219 5,798,041.111578, -10,942,625.131346 5,798,062.278287, -10,942,693.923150 5,798,120.486737, -10,942,696.568988 5,798,308.341279, -10,942,641.006377 5,798,440.633211, -10,942,588.089605 5,798,580.862658, -10,942,532.526994 5,798,665.529494, -10942503.422769 5798689.342041, -10942418.755933 5798697.279557, -10942387.005869 5798694.633719)) ', 55) forma) b donde sde.ST_Intersecta (forma a, forma b)

-

PLAN DE CONSULTA ------------------------------------------------ -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------- Bucle anidado (costo = 0,00… 24,79 filas = 5 de ancho = 4) (tiempo real = 0.168… 26826.593 filas = 317490 bucles = 1) -> Resultado (costo = 0.00… 0.01 filas = 1 ancho = 0) (tiempo real = 0.004… 0.008 filas = 1 bucles = 1) -> Índice escanear utilizando xx_test_4_sx en xx_test_4 un (coste = 0,00 ... 24,72 filas = 5 width = 36) (tiempo real = 0,143 ... 24439.164 filas = 317490 bucles = 1) Índice de Cond: (forma ^ ( 'C1000000180000000800100037000000A50200000100000095D3C7DCDE03A1A49F8BD307FCE0269B9D03CDAD67D0D809E2C323ED881DEAE943CCAD67D0CC40F93FF01E9F50CB1CCAF02DFB01399CE8502AFF08A0199DACE0190C077F9CD169BAAAA03D6BBF501B3F7D10! 1D5BBF501E9F50CC2DCA401CFD809FC85E002C49310F3F7D10100FFB08202A9F50C00000000 ':: st_geometry)) Tiempo de ejecución total: 27934,344 ms (5 filas)

Si ejecuto la misma consulta en la tabla PostGIS, se completa en 2.7 segundos:

-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------------------ Montón de mapa de bits Escanee en xx_test_5 a (costo = 19436.28… 131296.02 filas = 105119 ancho = 4) Vuelva a verificar Cond: (geom && '010300002001D3000001000000180000002F143060F6DE64 C123DA8EA8C91E56410F47D7EADBDE64C1ED293903C71E5641B4217F6BC6DE64C1ED293903C71E5641ADBDCF5EA2DE64C10B43E451CA1E56417287CD8091DE64C12786E44DCC1E564154901F5E78DE64C15D363AF3CE1E56414E9B713B5FDE64C175E789F4A31E5641A5A1C6EA5CDE64C1A3737EA44C1E56418C12741572DE64C19FE9252B341E56413A9677DF8CDE64C162D9CCB9171E5641935426F6ABDE64C19A5FCDB11B1E5641276BD416C6DE64C1D00F23571E1E56417EE4D6F0D8DE64C1D4BB78FC201E5641F791DBA8FCDE64C1D4BB78FC201E564130F232340CDF64C10D182447261E564187FC332414DF64C14774CF912B1E5641DE718ABD1CDF64C1F2B2261F3A1E5641522635121DDF64C1E083D715691E56418A3D342016DF64C16E8786288A1E56414E0BDE820FDF64C1E6C93537AD1E56418522DD9008DF64C1CD3AE361C21E5641DB5287ED04DF64C1EFFFE355C81E5641679A3058FADE64C10B43E451CA1E56412F143060F6DE64C123DA8EA8C91E5641' :: geometría) Filtro: _st_intersects (geom, '010300002001D3000001000000180000002F143060F6DE64C123DA8EA8C91E56410F47D7EADBDE64C1ED293903C71E5641B4217F6BC6DE64C1ED293903C71E5641ADBDCF5EA2DE64C10B43E451CA1E56417287CD8091DE64C12786E44DCC1E564154901F5E7 8DE64C15D363AF3CE1E56414E9B713B5FDE64C175E789F4A31E5641A5A1C6EA5CDE64C1A3737EA44C1E56418C12741572DE64C19FE9252B341E56413A9677DF8CDE64C162D9CCB9171E5641935426F6ABDE64C19A5FCDB11B1E5641276BD416C6DE64C1D00F23571E1E56417EE4D6F0D8DE64C1D4BB78FC201E5641F791DBA8FCDE64C1D4BB78FC201E564130F232340CDF64C10D182447261E564187FC332414DF64C14774CF912B1E5641DE718ABD1CDF64C1F2B2261F3A1E5641522635121DDF64C1E083D715691E56418A3D342016DF64C16E8786288A1E56414E0BDE820FDF64C1E6C93537AD1E56418522DD9008DF64C1CD3AE361C21E5641DB5287ED04DF64C1EFFFE355C81E5641679A3058FADE64C10B43E451CA1E56412F143060F6DE64C123DA8EA8C91E5641' :: geometría) -> Índice de mapa de bits de exploración en la xx_test_5_sx (coste = 0,00 ... 19410.00 filas = 315359 width = 0) Índice Cond: (geom && '010300002001D3000001000000180000002F143060F6DE64C123DA8EA8C91E56410F47D7EADBDE64C1ED293903C71E5641B4217F6BC6DE64C1ED293903C71E5641ADBDCF5EA2DE64C10B43E451CA1E56417287CD8091DE64C12786E44DCC1E564154901F5E78DE64C15D363AF3CE1E56414E9B713B5FDE64C175E789F4A31E5641A5A1C6EA5CDE64C1A3737EA44C1E5 6418C12741572DE64C19FE9252B341E56413A9677DF8CDE64C162D9CCB9171E5641935426F6ABDE64C19A5FCDB11B1E5641276BD416C6DE64C1D00F23571E1E56417EE4D6F0D8DE64C1D4BB78FC201E5641F791DBA8FCDE64C1D4BB78FC201E564130F232340CDF64C10D182447261E564187FC332414DF64C14774CF912B1E5641DE718ABD1CDF64C1F2B2261F3A1E5641522635121DDF64C1E083D715691E56418A3D342016DF64C16E8786288A1E56414E0BDE820FDF64C1E6C93537AD1E56418522DD9008DF64C1CD3AE361C21E5641DB5287ED04DF64C1EFFFE355C81E5641679A3058FADE64C10B43E451CA1E56412F143060F6DE64C123DA8EA8C91E5641' :: geometría)

Esta es la consulta ejecutada contra la tabla PostGIS:

seleccione operation_id de xx_test_5 a donde ST_Intersects (a.geom, ST_GeomFromText ('POLYGON ((… valores…));

También intenté configurar elenable_seqscan = falseen la consulta st_geometry, que cambió el plan de explicación pero no el tiempo de ejecución (todavía alrededor de 23 segundos):

Escaneo de pila de mapa de bits en victor quebec (costo = 24764.850… 60721.270 filas = 329794 ancho = 4) Vuelva a verificar Cond: (kilo ^! 'Cinco' :: siete) -> Escaneo de índice de mapa de bits en mike (costo = 0.000… 24682.400 filas = 329794 de ancho = 0) Condición de índice: (kilo ^! 'Cinco' :: siete)

http://explain.depesz.com/s/dI37

¿Cómo puedo hacer que la consulta st_geometry funcione como la consulta postgis?


Mi solución actual es construir una mesa lateral con 2 columnas, el objectid y la geometría (como geometría PostGIS). Y mantener esa tabla con disparadores en la clase de características. Luego, realice consultas espaciales en la mesa auxiliar y vuelva a unirse a la clase de características.

Tengo un incidente abierto con Esri, pero hasta ahora, no tuve suerte. Actualizaré esta respuesta si / cuando hagamos algún progreso en este frente.

Acabo de recibir un ID de error de Esri para este problema: BUG-000088734. Esri pudo reproducir el bajo rendimiento en el tipo de datos st_geometry (en un conjunto de registros mucho más pequeño que el que estaba usando). Los usuarios con bases de datos más pequeñas probablemente puedan absorber el impacto en el rendimiento (no lo noté hasta que mi tabla tenía varios millones de registros).


Ver el vídeo: QGeek 004 - NETWORK ANALYSIS IN QGIS - POSTGISPGROUTINGOSM2PGROUTING