Cinco lecciones prácticas sobre SQLite en producción con Django

Fuentes: Learning a few things about running SQLite

Un desarrollador comparte, tras usar SQLite en varios proyectos web y actualmente en un sitio Django, varias lecciones prácticas extraídas del día a día. La primera es la importancia de ejecutar ANALYZE: al hacer una consulta FTS5 sobre una tabla de 4.000 filas que tardaba 5 segundos, tras lanzar ANALYZE bajó a unas 0,05. ANALYZE genera estadísticas sobre las tablas para que el planificador de consultas elija mejores planes, lo que sugiere que la lentitud venía de un problema de complejidad cuadrática accidental.

La segunda lección trata sobre la limpieza de datos: borrar muchas filas en una sola operación puede superar el timeout de 5 segundos configurado y provocar que otros workers que intenten escribir agoten el tiempo y derrubien la aplicación. Su solución temporal es procesar las eliminaciones en lotes pequeños, aunque reconoce que quizá lo correcto sea planificar mantenimientos con la aplicación fuera de línea.

Sobre rendimiento del ORM de Django, indica que todavía no ha necesitado optimizar consultas porque la base de datos ronda las 10.000 filas y no espera que crezca mucho. Para las copias de seguridad describe dos métodos: por un lado, restic combinado con VACUUM INTO y gzip; por otro, litestream para realizar respaldos incrementales. Por último, explica que en un proyecto anterior, Mess with DNS, repartió las tablas en tres archivos SQLite distintos porque no necesitaban estar juntas, una estrategia que considera útil y que mantiene desde 2022 tras migrar desde Postgres.