8 votos

Rendimiento de ST_Union de PostGIS

Estoy tratando de ejecutar un 'disolver' operación en PostGIS el uso de la ST_Union comando.

La capa de entrada es bastante grande y complejo. Por los 'grandes' me refiero a 57,771 características, con el número de vértices que van de 4 a 758,018 por entidad, con un promedio de alrededor de 86 vértices por entidad. Sólo 10 de las características de >10,000 vértices. Por 'complejo' me refiero a que los polígonos tienen un montón de agujeros, desordenado se superpone, islas, etc. y que los polígonos grandes tienden a tener un cuadro delimitador que cubre muchos de los pequeños polígonos, tal vez desgarradora índices de menos útil.

El problema es que la consulta es extremadamente lento hasta el punto de ser inutilizable. Leer a Pablo de 2009 del post aquí que me llevan a creer que mi consulta debe todavía ser bastante rápido. Estoy usando el siguiente comando; estoy haciendo algo totalmente equivocado o ineficiente?

SELECT  ST_Union(f.geom) as geom, column1,column2,column3
FROM "inputlayer" As f 
GROUP BY column1,column2,column3

Edit: estoy usando:

POSTGIS="2.1.4 r12966" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.7.1, 23 September 2009" GDAL="GDAL 2.0.0dev, released 2014/04/16" LIBXML="2.7.8" LIBJSON="UNKNOWN" TOPOLOGY RASTER PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit

La máquina me estoy ejecutando el servidor de db es una máquina virtual sin necesidad de una gran cantidad de energía. Voy a tratar el CONJUNTO work_mem=50000 idea y ver cómo van las cosas!

3voto

dlanod Puntos 8661

Este tipo de operación se utiliza una gran cantidad de trabajo de la memoria como recuerdo, por lo que desea asegurarse de que usted no está en la configuración predeterminada de este, que es bastante baja;

Intente algo como

SET work_mem=50000;
Then run your query

Usted podría querer jugar con que workmem configuración

Usted también querrá volcado de que en una tabla -- no de salida a la pantalla. Supongo que usted sabe que ya

Otras cosas que usted quiere verificar -- que me ponen en los comentarios, pero voy a repetir aquí:

Hay dos cosas que la mejora de la unión de la velocidad-la cascada cosa que usted señaló, y para el conteo de polígonos el más rápido de la matriz acum (que creo que vino en PostGIS 1.5 (podría ser 1.4 no recuerdo), PostgreSQL 8.4 (migth ser 9.0 no puedo recordar)). También, incluso, una nueva GEOS no hacer el bien si está ejecutando < PostGIS 1.4

Por lo que comprobar tanto la versión de postgis y postgresql versión son importantes

SELECT postgis_full_version() || ' ' || version();

2voto

Erik Öjebo Puntos 6937

Incluso antes de ejecutar ST_Union

ANALIZAR su base de datos para consulta de actualización de las estadísticas.

VACÍO de su base de datos para purgar si no está ya en ejecución Autovacuum. Compruebe su configuración principal para asegurarse de que se establecen a valores sensatos..

shared_buffers should be 10% to 25% of available RAM
effective_cache_size should be 75% of available RAM 

Prueba cambiando work_mem: aumentar a 8 MB, 32 MB, 256 MB, 1 GB. ¿Hace alguna diferencia?

*32 MB es el valor predeterminado

fuente: https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X