Sqlite, reconstruire la bdd pour l'alléger
Il existe sur les bases de données SQLite une commande pour réduire la fragmentation des tables et optimiser l’espace disque. J’ai nommé: VACUUM.
Cette commande reconstruit la bdd pour éliminer les lignes vides et réorganise les index (plus de détails dans la doc en lien).
Comme certains logiciels se servent de sqlite comme BDD, il peut être intéressant d’utiliser cette commande de temps en temps.
La première fois que je l’ai fait pour firefox (fichier ~/.mozilla/firefox/nom-du-profil/*.sqlite
sur linux) j’ai gagné ½ giga :).
Voici un petit script qui va permettre de le faire sur tous les fichiers sqlite du système (du moins, ceux indexés) et connaître la taille totale avant et après utilisation:
#!/bin/sh
tmpf=${TMPDIR:=/tmp}/sqlite_file_path
locate \.sqlite \
| xargs -d'\n' mimetype \
| grep 'application/x-sqlite3$' \
| sed 's/:\s*application\/x-sqlite3\s*$//' \
> "$tmpf"
xargs --arg-file "$tmpf" -d'\n' du -hc | tail -n1
while read f ; do
sqlite3 "$f" 'VACUUM;' || echo "\tfor $f"
done < "$tmpf"
xargs --arg-file "$tmpf" -d'\n' du -hc | tail -n1
rm "$tmpf"
Et une petite version qui prend des fichiers en paramètre:
#!/bin/sh
du -hc "$@"
for f in "$@" ; do
sqlite3 "$f" 'VACUUM;'
done
du -hc "$@"