Learning a few things about running SQLite
J'utilise SQLite pour un site Django et j'ai vite réalisé que, même pour un petit site, SQLite reste une base de données qui demande des connaissances d'exploitation. Après avoir activé WAL j'ai découvert qu'exécuter ANALYZE a radicalement amélioré les performances d'une requête FTS5 (de ~5s à ~0,05s) car cela génère des statistiques pour le planificateur. Les opérations de nettoyage (suppressions massives) sont délicates car elles peuvent prendre plus de 5 secondes, provoquer des timeouts d'écriture, bloquer d'autres workers et même faire planter la VM, d'où la nécessité de supprimer en petits lots ou de prévoir une maintenance. Pour les sauvegardes j'ai utilisé soit un flux avec VACUUM INTO puis restic vers S3, soit Litestream pour des réplications incrémentales, sans toutefois avoir testé systématiquement la restauration. Il est possible de répartir les tables sur plusieurs fichiers de base de données et des projets qui ont fait ce choix montrent que SQLite peut rester viable selon les besoins du projet.