[gull] Parallelize Postgresql request

felix felix at f-hauri.ch
Thu Oct 10 08:39:03 CEST 2024


Voilà un sujet surprenant.

Un client me contacte car il à créé une base de données PostgreSQL,
sous window, avec une machine performante. Son projet fonctionne,
il décide de le passer sur machine tournant sous Linux.

Là il constate qu'un requête `select count(*) from SomeView where Id=12;`
prend environ 28 secondes sous Linux alors que sous Window, la réponse
arrive en 8 secondes!

Les machines sont différentes, mais cela n'explique pas:
   - Window 32G 12 coeurs 3GHz
   - Linux  16G 8 coeurs. 3.2GHz
Sous linux la swap n'est pas accédée.

En donc en suivant les acticités des processeurs, sous window on voit 
clairement les 12 cpu qui s'agittent durant les 8 secondes, alors que 
sous linux, on voit 1 processeur au top durant 4 secondes, puis un autre 
``prend le relais'', ainsi de suite, à aucun moment je ne voit plus d'un 
coeur au top. A noter que sous window, les 12 courbes s'agittent mais
aucune ne top (cela me semble logique en réfléchissant à la complexité
d'un requête de VUE qui contient des JOIN et autre resultat à imbriquer).

J'ai cherché les options de parallelization dans les configs de postgresql,
sur google&co, je dois dire que je ne vois pas...
Je n'ai pas bien compris non plus les calculs de coûts:

#seq_page_cost = 1.0                    # measured on an arbitrary scale
#random_page_cost = 4.0                 # same scale as above
#cpu_tuple_cost = 0.01                  # same scale as above
#parallel_tuple_cost = 0.1              # same scale as above
#parallel_setup_cost = 1000.0           # same scale as above
...

Il faut dire que ``measured on an arbitrary scale'' et ``same scale as above''
ne sont pas des information très explicites.

-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list