Suite

Comment puis-je accélérer une requête ArcGIS Server 10.2 - PostgreSQL (9.2) ST_Intersects lente ?


Je dépanne une requête st_geometry lente dans Postgres 9.2 qui utilise ST_Intersects - une requête de base Select from table où ST_Intersects type query.

table_extent | queryshape_extent ------------------------------------------------- -------------+------------------------------------- ---------------------------------- BOÎTE(-10942448.8275 5798114.3628,-10937877.2752 5800427.4828) | BOX(-10942696.568988 5797982.903128,-10941159.336747 5798715.800428) (1 rangée) Temps : 1086.008 ms

Classe d'entités ArcGIS (monde behrmann - 54017) :

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

J'ai également recréé la table et l'index spatial avec la géométrie PostGIS à des fins de comparaison, en utilisant la même configuration d'espace de table.

CREATE TABLE fe.xx_test_5 ( objectid integer, operation_id integer, geom geometry )

La requête featureclass(st_geometry) prend 23 secondes pour courir et retourne 317490 lignes (sur un total de 1031123 Lignes). Je ne savais pas si cela s'expliquait par le fait que je retourne 30% des lignes.

Mettre en doute:

sélectionner à partir d'un operation_id fe.xx_test_4, (select ST_Geometry ( « polygonal ((-10942387,005869 5.798.694,633719, -10.942.175,338779 5.798.684,050364, -10942003,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 5798715,800428, -10941177,857618 5798543,820917, -10.941.159,336747 5.798.194,570218, -10941328,670419 5798096.674189, -10.941.542,983348 5797982,903128, -10941791,692179 5797998,778160, -10942000,713430 5.798.009,361515, -10.942.151,526232 5798019,944869, -10942437,276803 5.798.019,944869, -10942561,631219 5798041,111578, -10942625,131346 5798062,278287, -10942693,923150 5798120,486737, -10.942.696,568988 5.798.308,341279, -10942641,006377 5.798.440,633211, -10.942.588,089605 5798580,862658, -10942532,526994 5.798.665,529494, -10942503.422769 5798689.342041,-10942418.755933 5798697.279557,-10942387.005869 5798694.633719))' ,55) forme) b où sde.ST_Intersects(a.shape, b.shape)

-

PLAN DE REQUÊTE ------------------------------------------------ -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------- Boucle imbriquée (coût=0.00… 24.79 lignes=5 largeur =4) (temps réel=0.168… 26826.593 lignes=317490 boucles=1) -> Résultat (coût=0.00… 0.01 lignes=1 largeur=0) (temps réel=0.004… 0.008 lignes=1 boucles=1) -> Index numérisation à l'aide xx_test_4_sx sur un xx_test_4 (coût = 0,00 ... 24,72 rangs = 5 width = 36) (temps réel = 0,143 ... 24439.164 lignes = 317490 boucles = 1) Indice Cond: (forme ^ ( 'C1000000180000000800100037000000A50200000100000095D3C7DCDE03A1A49F8BD307FCE0269B9D03CDAD67D0D809E2C323ED881DEAE943CCAD67D0CC40F93FF01E9F50CB1CCAF02DFB01399CE8502AFF08A0199DACE0190C077F9CD169BAAAA03D6BBF501B3F7D10! 1D5BBF501E9F50CC2DCA401CFD809FC85E002C49310F3F7D10100FFB08202A9F50C00000000'::st_geometry)) Durée d'exécution totale : 27934,344 ms (5 lignes)

Si j'exécute la même requête sur la table PostGIS, elle se termine en 2,7 secondes :

-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------------------ Tas Bitmap Scan sur xx_test_5 a (coût=19436.28… 131296.02 lignes=105119 largeur=4) Revérifier Cond : (geom && '010300002001D3000001000000180000002F143060F6DE64 C123DA8EA8C91E56410F47D7EADBDE64C1ED293903C71E5641B4217F6BC6DE64C1ED293903C71E5641ADBDCF5EA2DE64C10B43E451CA1E56417287CD8091DE64C12786E44DCC1E564154901F5E78DE64C15D363AF3CE1E56414E9B713B5FDE64C175E789F4A31E5641A5A1C6EA5CDE64C1A3737EA44C1E56418C12741572DE64C19FE9252B341E56413A9677DF8CDE64C162D9CCB9171E5641935426F6ABDE64C19A5FCDB11B1E5641276BD416C6DE64C1D00F23571E1E56417EE4D6F0D8DE64C1D4BB78FC201E5641F791DBA8FCDE64C1D4BB78FC201E564130F232340CDF64C10D182447261E564187FC332414DF64C14774CF912B1E5641DE718ABD1CDF64C1F2B2261F3A1E5641522635121DDF64C1E083D715691E56418A3D342016DF64C16E8786288A1E56414E0BDE820FDF64C1E6C93537AD1E56418522DD9008DF64C1CD3AE361C21E5641DB5287ED04DF64C1EFFFE355C81E5641679A3058FADE64C10B43E451CA1E56412F143060F6DE64C123DA8EA8C91E5641' :: géométrie) filtrer: _st_intersects (geom, « 010300002001D3000001000000180000002F143060F6DE64C123DA8EA8C91E56410F47D7EADBDE64C1ED293903C71E5641B4217F6BC6DE64C1ED293903C71E5641ADBDCF5EA2DE64C10B43E451CA1E56417287CD8091DE64C12786E44DCC1E564154901F5E7 8DE64C15D363AF3CE1E56414E9B713B5FDE64C175E789F4A31E5641A5A1C6EA5CDE64C1A3737EA44C1E56418C12741572DE64C19FE9252B341E56413A9677DF8CDE64C162D9CCB9171E5641935426F6ABDE64C19A5FCDB11B1E5641276BD416C6DE64C1D00F23571E1E56417EE4D6F0D8DE64C1D4BB78FC201E5641F791DBA8FCDE64C1D4BB78FC201E564130F232340CDF64C10D182447261E564187FC332414DF64C14774CF912B1E5641DE718ABD1CDF64C1F2B2261F3A1E5641522635121DDF64C1E083D715691E56418A3D342016DF64C16E8786288A1E56414E0BDE820FDF64C1E6C93537AD1E56418522DD9008DF64C1CD3AE361C21E5641DB5287ED04DF64C1EFFFE355C81E5641679A3058FADE64C10B43E451CA1E56412F143060F6DE64C123DA8EA8C91E5641' :: géométrie) -> Bitmap Index analyse sur xx_test_5_sx (coût = 0,00 ... 19410.00 lignes = 315359 width = 0) Index Cond: (geom && « 010300002001D3000001000000180000002F143060F6DE64C123DA8EA8C91E56410F47D7EADBDE64C1ED293903C71E5641B4217F6BC6DE64C1ED293903C71E5641ADBDCF5EA2DE64C10B43E451CA1E56417287CD8091DE64C12786E44DCC1E564154901F5E78DE64C15D363AF3CE1E56414E9B713B5FDE64C175E789F4A31E5641A5A1C6EA5CDE64C1A3737EA44C1E5 6418C12741572DE64C19FE9252B341E56413A9677DF8CDE64C162D9CCB9171E5641935426F6ABDE64C19A5FCDB11B1E5641276BD416C6DE64C1D00F23571E1E56417EE4D6F0D8DE64C1D4BB78FC201E5641F791DBA8FCDE64C1D4BB78FC201E564130F232340CDF64C10D182447261E564187FC332414DF64C14774CF912B1E5641DE718ABD1CDF64C1F2B2261F3A1E5641522635121DDF64C1E083D715691E56418A3D342016DF64C16E8786288A1E56414E0BDE820FDF64C1E6C93537AD1E56418522DD9008DF64C1CD3AE361C21E5641DB5287ED04DF64C1EFFFE355C81E5641679A3058FADE64C10B43E451CA1E56412F143060F6DE64C123DA8EA8C91E5641' :: géométrie)

Voici la requête exécutée sur la table PostGIS :

sélectionnez operation_id de xx_test_5 a où ST_Intersects(a.geom, ST_GeomFromText( 'POLYGON ((… valeurs… ));

J'ai aussi essayé de régler leenable_seqscan=falsesur la requête st_geometry, qui a changé le plan d'explication mais pas le temps d'exécution (toujours autour de 23 secondes) :

Bitmap Heap Scan sur victor quebec (coût=24764.850… 60721.270 lignes=329794 largeur=4) Recheck Cond: (kilo ^! 'cinq'::sept) -> Bitmap Index Scan sur mike (coût=0.000… 24682.400 lignes=329794 largeur =0) Index Cond : (kilo ^! 'cinq'::sept)

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

Comment puis-je faire en sorte que la requête st_geometry fonctionne comme la requête postgis ?


Ma solution de contournement actuelle consiste à créer une table d'appoint avec 2 colonnes, l'objectid et la géométrie (en tant que géométrie PostGIS). Et pour maintenir cette table avec des déclencheurs sur la classe d'entités. Effectuez ensuite des requêtes spatiales sur la table annexe et rejoignez la classe d'entités.

J'ai un incident ouvert avec Esri, mais jusqu'à présent, pas de chance. Je mettrai à jour cette réponse si/quand nous ferons des progrès sur ce front.

Je viens de recevoir un identifiant de bogue Esri pour ce problème : BUG-000088734. Esri a pu reproduire les mauvaises performances sur le type de données st_geometry (à un ensemble d'enregistrements beaucoup plus petit que ce que j'utilisais). Les utilisateurs avec des bases de données plus petites peuvent probablement absorber l'impact sur les performances (je ne l'ai pas remarqué avant que ma table ne compte plusieurs millions d'enregistrements).


Voir la vidéo: ArcGIS - Add Query Layer from ArcSDE on PostgreSQL (Octobre 2021).