[postgis-users] Why is && operator causing Parallel to kick in ?

Paul Ramsey pramsey at cleverelephant.ca
Wed Sep 25 08:11:45 PDT 2019


For fairly complex reasons having to do with the ST_Intersects() function being an inlined SQL function. 

https://carto.com/blog/postgres-parallel/ <https://carto.com/blog/postgres-parallel/>

The issues are fixed in Pg12 / PostGIS 3, but older combinations will be fiddly to parallelize, as you’ve found.

P.

> On Sep 25, 2019, at 7:14 AM, Lars Aksel Opsahl <Lars.Opsahl at nibio.no> wrote:
> 
> Hi
> 
> In the  first sql below we just use "ST_Intersects(r1.geo,r2.geo)", in the second SQL we add  "r1.geo && r2.geo" 
> 
> The second sql executes 3 times faster probably because of parallel seems to kick in. (if we adjust parallell settings we can get the second SQL to run 6. times faster)
> 
> Why is this happening when I just add "r1.geo && r2.geo" ?
> 
> I have ran ANALYZE on the table  before running the tests and there are indexes on geo and gid.
> Indexes:
>     "markslag_myrikilden_temp_gid_idx" UNIQUE, btree (gid)
>     "geoidx__markslag_myrikilden_temp___gist" gist (geo)
> 
> We run on
> PostgreSQL 11.5 on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
> POSTGIS="2.5.3 r17699" [EXTENSION] PGSQL="110" GEOS="3.8.0dev-CAPI-1.12.0 " SFCGAL="1.3.7" PROJ="Rel. 6.2.0, September 1st, 2019" GDAL="GDAL 3.1.0dev-7a9a0f4-dirty, released 2019/99/99" LIBXML="2.9.1" TOPOLOGY RASTER
> 1. SQL :
> EXPLAIN ANALYZE
> select atil, myr, myrtype,myromdanning,myrtypetext,myromdanningtext, ST_Collect(geo) as geo 
> from (
> select r1.gid, r1.atil, r1.myr, r1.myrtype,r1.myromdanning,r1.myrtypetext,r1.myromdanningtext,r1.geo, true doUnion
> from sde_markslag.markslag_myrikilden_temp r1,  sde_markslag.markslag_myrikilden_temp r2
> where ST_Intersects(r1.geo,r2.geo) and r1.gid != r2.gid
> ) as r
> group by atil, myr, myrtype,myromdanning,myrtypetext,myromdanningtext;
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>  HashAggregate  (cost=10519178.25..10519180.65 rows=192 width=46) (actualtime=185774.300..187207.628 rows=163 loops=1)
>    Group Key: r1.atil, r1.myr, r1.myrtype, r1.myromdanning, r1.myrtypetext, r1.myromdanningtext
>    ->  Nested Loop  (cost=0.29..9169289.37 rows=77136507 width=1612) (actual time=0.680..183087.904 rows=721668 loops=1)
>          ->  Seq Scan on markslag_myrikilden_temp r1  (cost=0.00..59170.91 rows=567241 width=1616) (actual time=0.021..640.233 rows=567241 loops=1)
>          ->  Index Scan using geoidx__markslag_myrikilden_temp___gist onmarkslag_myrikilden_temp r2  (cost=0.29..15.87 rows=19 width=1602) (actual time=0.257..0.317 rows=1 loops=567241)
>                Index Cond: (r1.geo && geo)
>                Filter: ((r1.gid <> gid) AND _st_intersects(r1.geo, geo))
>                Rows Removed by Filter: 2
>  Planning Time: 4.800 ms
>  Execution Time: 187214.730 ms
> (10 rows)
> Time: 187231.267 ms (03:07.231)
> 
> 
> 
> 2. SQL :
> EXPLAIN ANALYZE
> select atil, myr, myrtype,myromdanning,myrtypetext,myromdanningtext, ST_Collect(geo) as geo 
> from (
> select r1.gid, r1.atil, r1.myr, r1.myrtype,r1.myromdanning,r1.myrtypetext,r1.myromdanningtext,r1.geo, true doUnion
> from sde_markslag.markslag_myrikilden_temp r1,  sde_markslag.markslag_myrikilden_temp r2
> where r1.geo && r2.geo and ST_Intersects(r1.geo,r2.geo) and r1.gid != r2.gid
> ) as r
> group by atil, myr, myrtype,myromdanning,myrtypetext,myromdanningtext;
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>  HashAggregate  (cost=243692.31..243694.71 rows=192 width=46) (actualtime=62439.948..63863.421 rows=163 loops=1)
>    Group Key: r1.atil, r1.myr, r1.myrtype, r1.myromdanning, r1.myrtypetext, r1.myromdanningtext
>    ->  Gather  (cost=1000.28..242721.48 rows=55476 width=1612) (actual time=1.519..59526.211rows=721668 loops=1)
>          Workers Planned: 2
>          Workers Launched: 2
>          ->  Nested Loop  (cost=0.29..236173.88 rows=23115 width=1612) (actual time=0.583..59945.673 rows=240556 loops=3)
>                ->  Parallel Seq Scan on markslag_myrikilden_temp r1  (cost=0.00..55862.00 rows=236350 width=1616) (actual time=0.013..260.552 rows=189080 loops=3)
>                ->  Index Scan using geoidx__markslag_myrikilden_temp___gist onmarkslag_myrikilden_temp r2  (cost=0.29..0.75 rows=1 width=1602) (actual time=0.252..0.311 rows=1 loops=567241)
>                      Index Cond: ((r1.geo && geo) AND (r1.geo && geo))
>                      Filter: ((r1.gid <> gid) AND _st_intersects(r1.geo, geo))
>                      Rows Removed by Filter: 2
>  Planning Time: 7.791 ms
>  Execution Time: 63871.265 ms
> (13 rows)
> Time: 63886.211 ms (01:03.886)
> 
> 
> Lars
> 
> _______________________________________________
> postgis-users mailing list
> postgis-users at lists.osgeo.org <mailto:postgis-users at lists.osgeo.org>
> https://lists.osgeo.org/mailman/listinfo/postgis-users <https://lists.osgeo.org/mailman/listinfo/postgis-users>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20190925/bf4c7314/attachment.html>


More information about the postgis-users mailing list