[postgis-users] CPU tuning

Olivier Leprêtre o.lepretre at gmail.com
Mon Jan 9 04:56:13 PST 2017


Hi,

 

Thanks for your answer and this way of calculation. I don't know which machine you have but on mine, Option 1 launched from pgadmin takes 2,564,423 ms  (about 45 mn) a bit less than my original code (2,823,272 ms). So if this takes less than 1 second on yours, there is definitively a problem on my configuration or my machine which is nevertheless a very slow one : Hp Envy (Windows 10, i7-6500 CPU 2,5 Ghz 8go). I'm using postgresql/postgis 9.4 with its standard configuration.

 

During the option 1 query, the processor used again 30/35% CPU during all time. Difference is about memory, it grows up to 1Gb (shared buffer is set to this value) and then begin using disk about 10 Mo/s.  So I'm still wondering why the cpu doesn't go further than 30% and why this take such a difference on your machine. Is it a linux OS ?

 

Olivier

 

 

De : postgis-users [mailto:postgis-users-bounces at lists.osgeo.org] De la part de Rémi Cura
Envoyé : lundi 9 janvier 2017 10:52
À : PostGIS Users Discussion
Objet : Re: [postgis-users] CPU tuning

 

Hey,

I

​'m afraid you may not use the most efficient approach.

Assuming you want to find for each node of table x the closest node of table y,

it takes less than 1 second on my computer.




DROP TABLE  IF EXISTS  test_1; 
CREATE TABLE test_1 AS
SELECT s AS gid, ST_makePoint(random()*1000,random()*1000) AS geom
FROM generate_series(1,12000) AS s ;
CREATE INDEX ON test_1 USING GIST(geom) ; 
ALTER TABLE test_1 ADD PRIMARY KEY (gid) ; 


DROP TABLE  IF EXISTS  test_2; 
CREATE TABLE test_2 AS
SELECT s AS gid, ST_makePoint( random()*1000,random()*1000) AS geom
FROM generate_series(1,50000) AS s ;
CREATE INDEX ON test_2 USING GIST(geom) ; 
ALTER TABLE test_2 ADD PRIMARY KEY (gid) ;  

-- option 1 : you have lots of ram : brute force
DROP TABLE IF EXISTS test_results ;
CREATE TABLE test_results AS 
SELECT DISTINCT ON (test_1.gid ) test_1.gid AS gid1, test_2.gid AS gid2-- , ST_MakeLine(test_1.geom,test_2.geom) AS sline
FROM test_1, test_2
ORDER BY test_1.gid ,ST_Distance(test_1.geom,test_2.geom) ASC ;


--option2  : you have limited ram : snipping : force index use

DROP FUNCTION IF EXISTS test_sdist(geom1 geometry) ; 
CREATE OR REPLACE FUNCTION test_sdist(geom1 geometry, OUT gid2 bigint, OUT geom2 geometry) AS
 $$
    --given a point, find the closes one in test_2
    DECLARE 
    BEGIN 
        SELECT gid, geom INTO gid2, geom2
        FROM test_2
        ORDER BY ST_Distance(geom2,test_2.geom) ASC
        LIMIT 1  ;
        RETURN ; 
    END;
$$ LANGUAGE plpgsql; 

DROP TABLE IF EXISTS test_result_2 ;
CREATE TABLE IF NOT EXISTS test_result_2 AS 
SELECT test_1.gid AS gid1, f.gid2 AS gid2
FROM test_1, test_sdist(test_1.geom) AS f 

--option 3 : you could use a recursive CTE to avoid creating a dedicated dummy function, 

--           this would be a pain to write though

Cheers,

Rémi-C​

 

 

2017-01-08 16:36 GMT+01:00 Olivier Leprêtre <o.lepretre at gmail.com>:

Hi,

 

I have a pgsql postgis function that last about an hour on an Hp Envy (W10, i7-6500 CPU 2,5 Ghz 8go). This function is calculating minimum distance between each nodes of table x (12000 nodes) and table y (42000 nodes)

 

FOR row IN 

                   SELECT code,ST_AsEwkt(ST_StartPoint(geom)) as geom1  FROM t_x

LOOP

                   FOR row1 IN

                            SELECT code, ST_Distance(ST_AsEwkt(geom)::text,row.geom1) FROM t_y order by ST_Distance(ST_AsEwkt(geom)::text,row.geom1) LIMIT 1

 

                   LOOP

                   END LOOP;

....

 

 

What I don't understand is that postgresql server process CPU is stable during all that time at 30/31% with no other process running. Details of each processor 1 to 3 shows that all 4 uses 30%. Disk and network usage are 0% (database is local) Ram usage is 47% and Postgresql server uses process only 7,4 Mo.

 

My question is "Why postgres process uses such a precise and constant cpu and doesn't grow up to more than 30% ?" I didn't find any parameter forcing such a limit in order to reduce duration of this calculation.

 

Thanks for any answer,

 

Olivier

 

  _____  


 <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> Avast logo

L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. 
www.avast.com <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient>  

 


_______________________________________________
postgis-users mailing list
 <mailto:postgis-users at lists.osgeo.org> postgis-users at lists.osgeo.org
 <http://lists.osgeo.org/mailman/listinfo/postgis-users> http://lists.osgeo.org/mailman/listinfo/postgis-users

 



---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20170109/20f01136/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 1588 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20170109/20f01136/attachment.png>


More information about the postgis-users mailing list