<!--
Les sources pour ce sujet sont :

* https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=ac0e33136

Discussion :

* https://postgr.es/m/CALj2ACW4aUe-_uFQOjdWCEN-xXoLGhmvRFnL8SNw_TZ5nJe+aw@mail.gmail.com
* https://postgr.es/m/OS0PR01MB5716C131A7D80DAE8CB9E88794FC2@OS0PR01MB5716.jpnprd01.prod.outlook.com

-->

<div class="slide-content">

  * Nouveau paramètre `idle_replication_slot_timeout`
  * Invalidation basée sur la durée d'inactivité
  * Exprimé en minute
  * Réplication physique et logique

</div>

<div class="notes">

Depuis la version 13 de PostgreSQL, nous disposons d'un moyen pour invalider
les slots de réplication en fonction de la quantité de WAL retenus :
`max_slot_wal_keep_size`. Ce paramètre permet de préserver le service en
éliminant une source possible de saturation du stockage contenant les WAL.

La version 18 introduit le paramètre `idle_replication_slot_timeout` qui permet
d'invalider des slots en se basant sur la durée d'inactivité du slot.
Celle-ci est calculée avec le champ `inactive_since` de `pg_replication_slots`, apparu en version 17.
Le défaut (0) conserve indéfiniment les slots.
La durée est exprimée en minute.

Comme  l'invalidation a lieu lors des checkpoints, qui ont lieu tous les
`checkpoint_timeout` (5 minutes par défaut, parfois plus),
ou une fois `max_wal_size` atteinte, il est possible que
le slot soit invalidé plus tard que prévu. Dans ce cas, il est possible de
forcer un checkpoint manuellement.

Ce mécanisme d'invalidation ne fonctionne que pour des slots qui réservent des
WAL, ce qui est le mode habituel.
Cela exclut les slot synchronisés (`synced`) depuis le primaire (une nouveauté
de la version 17), c'est-à-dire des slots posés sur un serveur secondaire
(réplica physique), en complément d'un primaire,
et destinés à garantir le maintien de la réplication en cas de bascule.
En effet, ces slots
sont considérés comme inactifs car ils ne réalisent pas de décodage logique.

</div>
