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 30/11/2023 17:47:56

Génération de WALs même avec wal_level=minimal

Bonjour,

j'ai créé une instance PostgreSQL v15 et j'ai un petit souci.
Je voulais désactiver la génération de WALs pour un besoin spécifique, donc j'ai configuré le postgresql.conf ainsi :

archive_mode=off
wal_level
max_wal_senders=0

puis redémarré l'instance.

Ensuite, j'ai créé une petite table et inséré plusieurs millions de ligne dans la table :

postgres=# create table T1 (c1 integer not null, c2 varchar(30));
CREATE TABLE

postgres=# insert into T1 (c1) SELECT * FROM generate_series(1, 1000000) as id;
INSERT 0 1000000

postgres=# insert into T1 (c1) SELECT * FROM generate_series(1000001, 10000000) as id;
INSERT 0 9000000

Mais je me rends compte que PostgreSQL génère plein de fichiers WALs dans le sous-répertoire pg_wal

SERVEUR1 postgres</test/log>ls -ltr ../pg_wal/
total 589828
drwx------. 2 postgres postgres     4096 Nov 30 15:44 archive_status
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000005
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000006
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000007
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000008
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000009
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 00000001000000000000000A
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 00000001000000000000000B
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 00000001000000000000000C
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 00000001000000000000000D
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 00000001000000000000000E
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 00000001000000000000000F
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000010
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000011
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000012
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000013
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000014
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000015
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000016
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000017
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000018
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000019
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 00000001000000000000001A
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 00000001000000000000001B
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 00000001000000000000001C
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 00000001000000000000001D
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 00000001000000000000001E
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 00000001000000000000001F
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000020
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000021
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000022
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000023
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000024
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000025
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000026
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000027
-rw-------. 1 postgres postgres 16777216 Nov 30 15:52 000000010000000000000028

Est-ce qu'il y a une manip / config à faire pour qu'il ne me génère pas tous ces fichiers svp ?

Merci d'avance pour votre retour.
Cordialement,

Hors ligne

#2 30/11/2023 18:22:22

ruizsebastien
Membre

Re : Génération de WALs même avec wal_level=minimal

Bonjour,
vous ne pourrez jamais empêcher la génération des fichiers WAL car ce sont des éléments vitaux pour le fonctionnement de postgresql.
On ne va pas faire un cours ici mais pour faire vite : il ne faut jamais rien toucher du contenu du répertoire des wal sinon vous risquez de perdre définitivement votre instance et vos données.
https://docs.postgresql.fr/16/wal-intro.html


Cordialement,

Sébastien.

Hors ligne

#3 30/11/2023 18:41:01

Re : Génération de WALs même avec wal_level=minimal

OK merci pour la réponse.
Mais dans ce cas, quel est l'intérêt de positionner les paramètres "wal_level=minimal" et "archive_mode=off" si PpostgreSQL génère autant de fichiers WALs qu'avec "archive_mode=on" et "wal_level=replica" ?
J'aimerai juste comprendre cette différence.
Il me semblait qu'avec "wal_level=off", il ne générait qu'un minimum de fichiers WALs.
Hors, cela ne semble pas être le cas dans mon exemple ...
Merci d'avance.
Cdlt,

Hors ligne

#4 30/11/2023 18:45:41

ruizsebastien
Membre

Re : Génération de WALs même avec wal_level=minimal

wal_level permet d'ajouter plus ou moins d'information dans les wal et cela permet (selon le niveau choisi) de faire de la replication physique, logique, etc...
Si vous mettez wal_level à minimal vous aurez moins d'informations dans les wal donc au final moins de wal au total pour une même période de temps qu'avec wal_level à logical.
archive_mode permet d'activer ou de désactiver l'archivage des wal à des fins de restauration PITR, c'est dire que selon la quantité de wal que vous archivé vous pourrez revenir jusqu'à un point dans le temps plus ou moins éloigné.

Dernière modification par ruizsebastien (30/11/2023 18:46:53)


Cordialement,

Sébastien.

Hors ligne

#5 30/11/2023 19:03:07

Re : Génération de WALs même avec wal_level=minimal

OK, merci beaucoup.
Cdlt,

Hors ligne

#6 30/11/2023 19:11:15

Marc Cousin
Membre

Re : Génération de WALs même avec wal_level=minimal

En fait ça tombe plutôt bien, on est en plein dans un des cas que wal_level=minimal permet d'optimiser. Si vous mettez le CREATE TABLE et les deux inserts dans la même transaction, là vous ne générerez pas de WAL avec wal_level=minimal. Parce que simplement vérifier que la table est écrite sur le disque à la fin de la transaction (un sync des fichiers qui la composent) suffit (si PG crashait entre temps, il suffirait d'effacer ces fichiers au redémarrage).

Mais en vrai, il y a peu de cas où on gagne vraiment avec minimal. Il faut vraiment connaître ces quelques cas particuliers pour en profiter

Dernière modification par Marc Cousin (30/11/2023 19:12:58)


Marc.

Hors ligne

Pied de page des forums