PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 16/02/2022 19:58:02

adu31
Membre

partitionning planner bloqué sur un vacuum full d'une partition ?

Bonjour,

J'utilise le partitionning dans Postgres 12 (avec INHERITS) sur des intervalles de date mensuels. Quand je lance un vacuum full directement sur une "vieille" partition qui peut durer plusieurs minutes, mes autres requêtes d'écriture et même de lecture sont bloquées pendant ce temps. les requêtes de lectures passent par la table principale en précisant un intervalle de date "récent" (ne contenant pas la partition en cours de vacuum).

sur une requête de select "bloquée", je vois un AccessShareLock granted à true sur toutes les partitions sauf à false sur celle en cours de vacuum
La résolution par le planner des partitions impactées pour le select ne peut pas se faire si une des partitions est lockée ?
c'est gênant à l'usage. casser le lien d'héritage le temps du vacuum est-elle la seule solution ?

Je ne sais pas si le partitioning déclaratif change quelque chose à ce niveau ? ou sur une version plus récente de postgres ?


Merci

Hors ligne

#2 17/02/2022 05:19:43

rjuju
Administrateur

Re : partitionning planner bloqué sur un vacuum full d'une partition ?

Bonjour,

casser le lien d'héritage le temps du vacuum est-elle la seule solution ?

Avec l'héritage de table oui.


Le partitionnement déclaratif n'a pas ce problème, c'est d'ailleurs testable en moins de 2 minutes si vous voulez vérifier.

Hors ligne

#3 17/02/2022 10:40:51

dverite
Membre

Re : partitionning planner bloqué sur un vacuum full d'une partition ?

En ce qui concerne "casser le lien d'héritage".
Il faut savoir qu'avec l'héritage, sortir une table de la hiérarchie et la remettre n'est pas une opération neutre.
Une fois que la table fille est remise dans la hiérarchie, les modifications de colonnes existantes du parent ne sont plus propagées dans la table fille comme avant.
Plusieurs utilisateurs comme moi ont signalé ça comme un bug tant c'est surprenant, mais il s'avère que ce n'est pas un bug, c'est conçu comme ça.

Exemple:

DROP TABLE  IF EXISTS parent_tbl CASCADE; 

CREATE TABLE parent_tbl(f1 int, f2 int, f3 int); 

CREATE TABLE child1_tbl() INHERITS(parent_tbl); 
CREATE TABLE child2_tbl() INHERITS(parent_tbl); 
CREATE TABLE child3_tbl() INHERITS(parent_tbl); 

ALTER TABLE child2_tbl NO INHERIT parent_tbl; 
ALTER TABLE child2_tbl INHERIT parent_tbl; 

ALTER TABLE parent_tbl DROP COLUMN f2; 

\d child*_tbl 

            Table "public.child1_tbl" 
Column |  Type   | Collation | Nullable | Default 
--------+---------+-----------+----------+--------- 
f1     | integer |           |          | 
f3     | integer |           |          | 
Inherits: parent_tbl 

            Table "public.child2_tbl" 
Column |  Type   | Collation | Nullable | Default 
--------+---------+-----------+----------+--------- 
f1     | integer |           |          | 
f2     | integer |           |          | 
f3     | integer |           |          | 
Inherits: parent_tbl 

            Table "public.child3_tbl" 
Column |  Type   | Collation | Nullable | Default 
--------+---------+-----------+----------+--------- 
f1     | integer |           |          | 
f3     | integer |           |          | 
Inherits: parent_tbl 

Hors ligne

#4 17/02/2022 10:44:31

adu31
Membre

Re : partitionning planner bloqué sur un vacuum full d'une partition ?

Merci, je vais essayer avec le partitionnement déclaratif alors !

Hors ligne

Pied de page des forums