Pages

lundi 4 mars 2013

Sqlite, reconstruire la bdd pour l'alléger.

Je ne vais pas par 4 chemins : VACUUM.

Cette commande permet de reconstruire une table et ainsi éliminer les lignes vides et réorganise les index (c'est mieux dit dans la doc ^^).
Certains logiciels se servent de sqlite ; utiliser cette commande de temps en temps sur les tables est une bonne idée.
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=/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;'
 [ $? -ne 0 ] && echo "\tfor $f"
done < $tmpf
xargs --arg-file $tmpf -d'\n' du -hc | tail -n1
rm $tmpf

Une petite version pour cibler les fichiers:

#!/bin/sh
for f in "$@" ; do sqlite3 "$f" 'VACUUM;'; done

Aucun commentaire: