Optimiser et réduire la taille d’une base de données SQLite

SQLite, c’est un système de gestion de bases de données relationnelle open source qui est maintenant bien installé depuis maintenant plusieurs années. Son avantage est qu’il est très portable par rapport à par exemple un MariaDB étant donné que tout se passe au sein d’un seul fichier. Je l’utilise dans certains projets Laravel avec pas mal de données et pour répondre à un certains besoin, tout se passe très bien. J’en suis très content et je n’ai jamais eu de problèmes particuliers. Surtout que pour sauvegarder votre base de données SQLite, si le développement application est actif avec beaucoup de modifications, vous copiez le fichier puis le mettez ailleurs et voilà, c’est sauvegardé !

Bon, je ne vais pas vous faire un éloge sans limites de SQLite, mais c’est une solution légère, autonome, sans serveur, qui supporte les transactions et qui nécessite peu de configuration. C’est assez pratique dans de nombreux cas d’usage si on ne veut pas se prendre la tête. SQLite est aussi largement utilisé dans le développement d’applications mobiles sur des plateformes comme Android et iOS. C’est d’ailleurs utilisé dans certaines applications de bureau pour stocker un peu d’information. Un développeur WordPress avait même évoqué son support natif il y a quelque temps, mais depuis les choses n’ont malheureusement pas beaucoup bougés de ce côté. Du moins de façon officielle.

La commande pour optimiser et baisser le poids d’une base de données SQLite

Sur ma base de données SQLite en local, je fais beaucoup de traitements avec notamment des transactions sur des millions de ligne par jour pour un besoin particulier. Je fais confiance à la base de données pour certaines opérations plutôt que l’implémenter dans le code. Les développeurs qui travaillent sur le SGBDR SQLite, sont des gens qui sont plus talentueux que moi. D’ailleurs, je le vois chaque jour, ça marche très bien et c’est surtout très rapide sur un SSD. Autant utiliser les outils à notre disposition pour gagner du temps non ?

Sauf qu’après quelque temps et une utilisation très intensive la taille de cette base à tendance à légèrement gonfler. Bon rien de bien fou et on parle de millions de lignes manipulées, mais quand même. Je sais qu’il est possible de récupérer un peu d’espace de stockage sur mon SSD donc autant en profiter à l’aide d’une simple commande. Avant d’optimiser ma base de données SQLite elle fait donc cette taille :

Donc 10 Go sur l’espace de stockage, aujourd’hui ce n’est pas grand-chose, mais si on peut gagner un peu de place, pourquoi ne pas en profiter ? On va donc optimiser un peu cette base de données SQLite à l’aide d’une simple petite commande. Dans un premier temps, il faut d’abord dans rentrer dans votre base de données avec la syntaxe de SQLite :

sqlite3 b.sqlite

Une fois que vous êtes entré dans votre base de données SQLite, il vous suffit d’exécuter la commande suivante :

VACUUM;

Voilà, c’est tout ! Non, quand même, je vais vous en dire un peu plus, car c’est bien de comprendre un peu ce qu’il se passe. Toutefois attention, j’ai oublié de vous le préciser, selon la quantité de données de votre base de données et votre support de stockage, cette opération peut être plus ou moins longue. Voir vraiment longue.

À quoi sert la commande VACUUM dans SQLite ?

La commande VACUUM dans SQLite est un peu comme le grand ménage de printemps pour votre base de données. Imaginez que, au fil du temps, votre base de données accumule des poussières et des toiles d’araignée dans les coins sous forme d’espace inutilisé, suite à une multitude d’opérations telles que les suppressions, les mises à jour, et les insertions. Tout comme vous réorganiseriez vos meubles pour optimiser l’espace dans votre maison, VACUUM prend en charge la réorganisation des données de votre base de données. Le résultat ? Un fichier de base de données plus compact, qui non seulement prend moins de place sur votre disque, mais permet aussi à vos applications de récupérer les données plus rapidement.

Mais ce n’est pas tout ! En plus de faire de la place et d’accélérer les choses, VACUUM s’occupe aussi de petits détails qui comptent beaucoup pour la santé à long terme de votre base de données. Par exemple, il réajuste les identifiants ROWID pour qu’ils suivent une séquence continue, et il peut même corriger de petits désordres qui se sont glissés dans votre base de données au fil du temps. Certes, utiliser VACUUM demande un petit investissement en temps et en espace disque temporaire, mais pensez-y comme à un investissement pour le bien-être de votre base de données.

Après avoir exécuté cette commande VACUUM, voici la taille de ma base de données :

J’avais exécuté un VACUUM il n’y a pas très longtemps et pourtant, j’ai quand même récupéré un peu de place. Imaginez sur une base de données SQLite ou ça n’a jamais été fait et qui est activement utilisée ! Vous pouvez utiliser cette commande les eux fermés moyennant un peu de temps de pause et si ça vous intéresse la documentation officielle de SQLite pourra vous en dire un peu plus.

Laisser un commentaire