Keeping a Postgres Queue Healthy
Postgres est souvent utilisé pour des files de travaux où les lignes sont très transitoires et le débit cumulé est élevé, ce qui exige un nettoyage efficace des tuples morts. Le mécanisme MVCC de Postgres laisse des tuples morts après les DELETE, et VACUUM ne peut les retirer tant qu'une transaction active maintient l'horizon de visibilité, ce qui alourdit les scans d'index. Dans des bases partagées par files, analyses et autres charges, des requêtes longues ou qui se chevauchent peuvent empêcher VACUUM d'avancer, et les timeouts standards ne permettent pas de contrôler la concurrence par classe de trafic, malgré les améliorations récentes de Postgres. PlanetScale propose Traffic Control avec des Resource Budgets pour limiter la concurrence et la consommation par type de requête, et des tests montrent que cette approche permet de préserver l'efficacité du VACUUM et la santé de la file. Pour maintenir une file saine, il convient d'assurer que VACUUM peut suivre le rythme des suppressions, d'ajouter des retries côté applicatif pour les requêtes tuées et, si nécessaire, de mettre en place un contrôle de trafic granulaire.