<!--
Le commit sur ce sujet :

* https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3727b8d0e3f1fa7568f6a6f4378ce5a79daeb0d9


 Discussions : 
 
 * http://postgr.es/m/CA+TgmoYOYZfMCyOXFyC-P+-mdrZqm5pP2N7S-r0z3_402h9rsA@mail.gmail.com

-->

<div class="slide-content">

* Nouveau processus en arrière-plan : `walsummarizer`
* Fichiers sommaires stockés dans `$PGDATA/pg_wal/summaries`
* Nouveaux paramètres
  + activation avec `summarize_wal`
  + rétention des fichiers avec `wal_summary_keep_time`
* Nouvel utilitaire `pg_walsummary` permettant de consulter le contenu des sommaires

</div>

<div class="notes">

**Activation**

Par défaut, le processus `walsummarizer` n'est pas lancé. Pour qu'il le soit au 
démarrage de PostgreSQL, il faut configurer le paramètre `summarize_wal` à `on` 
et le paramètre `wal_level` à une valeur autre que `minimal`.

```ini
summarize_wal = on
```

Le paramètre `wal_summary_keep_time` détermine combien de temps les fichiers `summaries` 
sont conservés avant d'être automatiquement supprimés. Par défaut, ils sont gardés 
pendant 10 jours.

Rétention définie à 15 jours pour l'exemple :

```ini
wal_summary_keep_time = '15d'
```

Si le processus `walsummarizer` est désactivé, les fichiers existants 
ne seront pas supprimés, car le processus ne sera pas en cours d'exécution.


**Fichiers sommaires WAL**

Les fichiers sommaires de WALs (ou `summaries`) sont générés dans le répertoire 
`pg_wal/summaries/` par le processus `walsummarizer`. Chaque sommaire couvre une 
timeline spécifique. Il enregistre des informations sur les modifications apportées 
aux données sur cette timeline. Ce processus est nécessaire pour les sauvegardes 
incrémentales.

Voici un exemple du contenu de ce répertoire :

```bash
postgres@17:~$ ls -altrh data_v17/pg_wal/summaries/

total 76K
-rw------- 1 postgres postgres 4,7K sept.  14 14:42 00000001000000000100002800000000010B1D38.summary
-rw------- 1 postgres postgres 4,9K sept.  14 14:42 0000000100000000010B1D3800000000014DF280.summary
-rw------- 1 postgres postgres   56 sept.  14 14:42 0000000100000000014DF28000000000014DF380.summary
-rw------- 1 postgres postgres   56 sept.  14 14:42 0000000100000000014E5D6800000000014E5E68.summary
...
-rw------- 1 postgres postgres 1,9K sept.  14 14:54 000000010000000001F87F400000000004A9A748.summary
drwx------ 2 postgres postgres 4,0K sept.  14 14:54 .
drwx------ 4 postgres postgres 4,0K sept.  14 14:55 ..
```

**Consulter les sommaires WAL disponibles**

Pour vérifier les sommaires de WALs existants, la fonction `pg_available_wal_summaries()`
permet d'énumérer les plages de LSN disponibles :

```sql
postgres=# SELECT * FROM pg_available_wal_summaries();

-[ RECORD 1 ]--------
tli       | 1
start_lsn | 0/152AA98
end_lsn   | 0/19519D8
```

Cette commande montre qu'un `WAL summary` est disponible pour la plage de LSN allant
de 0/152AA98 à 0/19519D8.

**Informations supplémentaires sur les sommaires de WAL**

Pour obtenir les informations détaillées sur les blocs modifiés dans un sommaire de WAL, 
la fonction `pg_wal_summary_contents()` peut être utilisée comme suit :

```sql
postgres=# SELECT * FROM pg_wal_summary_contents(1, '0/152AA98', '0/19519D8');

-[ RECORD 1 ]--+------
relfilenode    | 0
reltablespace  | 1663
reldatabase    | 24576
relforknumber  | 0
relblocknumber | 0
is_limit_block | t
```

Cette sortie montre les détails des blocs modifiés, notamment l'identifiant de la
base de données, le tablespace, et les blocs affectés.

**Vérifier le contenu des sommaires avec `pg_walsummary`**

Le nouvel utilitaire `pg_walsummary` permet de consulter le contenu des sommaires,
à des fins de débogage par exemple :

``` bash
postgres@17:~$ /usr/lib/postgresql/17/bin/pg_walsummary \
> data_v17/pg_wal/summaries//00000001000000049A324288000000049A74A620.summary 
TS 1663, DB 24990, REL 0, FORK main: limit 0
TS 1663, DB 24990, REL 827, FORK main: block 0
TS 1663, DB 24990, REL 828, FORK main: limit 0
TS 1663, DB 24990, REL 828, FORK main: block 0
TS 1663, DB 24990, REL 1247, FORK main: limit 0
TS 1663, DB 24990, REL 1247, FORK main: blocks 0..14
```

**État du processus `WAL summary`**

La commande `pg_get_wal_summarizer_state()` permet de surveiller l'état du processus 
qui génère les sommaires de WALs :

```sql
postgres=# SELECT * FROM pg_get_wal_summarizer_state();

-[ RECORD 1 ]--+----------
summarized_tli | 1
summarized_lsn | 0/4A9A748
pending_lsn    | 0/4B51908
summarizer_pid | 365327
```

Cette commande montre le LSN de fin du dernier fichier de résumé et le dernier LSN traité.

**Taille des fichiers sommaires**

Les fichiers générés par le processus `walsummarizer` sont de taille raisonnable :

``` bash
postgres@17:~$ dropdb bench
createdb bench
psql -c "SELECT pg_create_restore_point('Début test')" -c "CHECKPOINT;"
pgbench -i -s410 --partitions=50 bench

postgres@17:~$ ls -altrh data_v17/pg_wal/summaries/
total 1.6M
```

</div>
