noisia - Générateur de charges de travail nocives pour PostgreSQL
(github.com/lesovsky)- Outil d’injection de pannes permettant de créer volontairement des situations de défaillance comme l’épuisement des connexions / l’attente sur verrou / les interblocages / l’OOM / le manque d’espace disque afin de les tester
- Prend en charge une grande variété de charges de travail, des transactions inactives / rollbacks / interblocages / fichiers temporaires / arrêt de backends jusqu’à l’explosion du WAL / le gonflement des tables
- Certaines charges de travail peuvent, au-delà de l’épuisement de
max_connections, du retard de réplication ou de la dégradation des performances de stockage, provoquer un PANIC ou un redémarrage complet de l’instance PostgreSQL - Exécutable immédiatement via une image Docker, ou en important des charges de travail individuelles depuis du code Go ; il est indispensable d’utiliser un context et un délai d’expiration pour éviter une exécution infinie
- Charges de travail prises en charge
- idle transactions : laisse des transactions ouvertes sans rien faire, ce qui gêne le nettoyage (
VACUUM) et fait gonfler tables et index - rollbacks : envoie volontairement des requêtes erronées pour provoquer des erreurs et augmenter le nombre de rollbacks
- waiting transactions : une session verrouille une table, puis les connexions suivantes s’accumulent en attente jusqu’à atteindre la limite de connexions (
max_connections), bloquant ainsi les nouvelles connexions - deadlocks : place deux transactions dans une situation d’interblocage où chacune attend le verrou voulu par l’autre
- temporary files : force le tri de données plus volumineuses que la mémoire (
work_mem) afin de déverser des fichiers temporaires sur disque (work_memplus élevé les fait disparaître) - terminate backends : termine aléatoirement de force des sessions / requêtes en cours avec
pg_terminate_backend()etc. - failed connections : accapare toutes les connexions pour empêcher complètement les autres clients de se connecter ; épuise la limite
max_connections - fork connections : envoie à chaque fois de courtes requêtes via une nouvelle connexion afin de pousser Postgres à créer excessivement des processus enfants
- backend-killer : une session accumule continuellement des prepared statements, fait enfler la mémoire puis provoque un OOM-kill entraînant le redémarrage complet de l’instance
- slot-bloat : un replication slot que personne ne lit retient le WAL jusqu’à remplir
pg_walet saturer le disque, ce qui met l’instance en PANIC - wal-flood : des workers
UPDATEparallèles font exploser le WAL pour générer du retard de réplication / une pression sur les E/S (la version « visible » de slot-bloat, le remplissage du disque dépend de l’environnement) - bloat-churn : des
UPDATEparallèles font gonfler les tables plus vite qu’autovacuum, mais après l’arrêt il est possible de revenir en arrière avecVACUUM FULL/pg_repack/REINDEX CONCURRENTLY
- idle transactions : laisse des transactions ouvertes sans rien faire, ce qui gêne le nettoyage (
- Ne pas l’exécuter sans en comprendre parfaitement le fonctionnement ; à utiliser strictement à des fins de test
- Licence BSD-3-Clause
Aucun commentaire pour le moment.