Libérant ainsi l'espace disque après base de données supprimée
-
22-10-2019 - |
Question
Je travaille sur un système de dev, et je suis la restauration d'une base de données, dites « foo », que j'utilise à des fins de dev. Comme je travaille à travers les petits défauts, je viens en cours d'exécution foo DROP DATABASE. Cependant, je suis vite rendu compte que je mangeais tout l'espace sur mon disque. Crap.
Est-ce que VACUUM FULL, à partir d'une base de données logique différente, libérer de l'espace à partir de la base de données que je laissai tomber précédemment (foo)? J'ai essayé à partir d'une base de données logique différente, et de l'espace libre a été remis en état, mais je ne pensais pas qu'il suffisait de compte pour l'ensemble de l'CREATE DATABASE / DROP appelle j'ai fait. Il aurait pu juste VACUUM'ed la base de données logique je courais de.
Il doit y avoir un moyen de récupérer cet espace sans faire une base de données totale initialisation?
EDIT
Je réinitialisée la base de données à partir d'une sauvegarde, à peu près suivant: ces étapes . Après la restauration, je l'ai récupéré une tonne d'espace sur le disque! Cela fonctionne pour l'instant, mais toute aide en ce qui concerne la façon de nettoyer une base de données a chuté serait toujours utile.
EDIT 2
J'ai donc réussi à recueillir quelques informations supplémentaires sur cette question ... Voici ce que je suis venu avec comme exemple:
Initial partition size:
Size Used Avail Use% Mounted on
25G 8.1G 16G 35% /apps1
After creating my new database and populating it:
25G 18G 6.4G 73% /apps1
After Dropping the database using "DROP database mydb" from a separate logical DB:
25G 13G 11G 56% /apps1
Il me semble que le nouveau DB a pris ~ 9,6 Go sur le disque. Cependant, après une chute, l'espace disque récupéré n'a augmenté que de ~ 4.6g. Donc, il y a environ 5 Go d'espace qui me demande ce qui se passe!
Et il continue ce cycle quand je recrée, Populate et laisse tomber à nouveau.
Est-ce que quelqu'un a une idée ce qui est persistante après une commande « DROP DATABASE » est émise?
Pas de solution correcte
Autres conseils
Essayez sudo lsof| grep deleted
et vérifier si un processus PostgreSQL apparaît. Cette commande recherche les fichiers qui ont été supprimés, mais ses descripteurs de fichiers sont toujours ouverts par tout processus. Un autre effet secondaire est différent de df -h
et du -sh /
. En effet, ressemble du
au système de fichiers et somme la taille de tous les fichiers, et ressemble df
au dispositif physique.
Je viens d'avoir un problème avec une base de données qui ne dispensait pas d'espace après une DROP table
et qui était la cause.
La seule solution que je sais est de redémarrer la base de données. Peut-être que vous pouvez essayer d'envoyer un reload (SIGHUP).
Ma compréhension est que lorsque vous déposez une base de données puis, et les fichiers de elle, ont disparu.
Sauf si vous utilisez tablespaces Chaque base doit avoir ses données dans son propre sous-répertoire $ PGDATA / base. L'utilisation d'un de mes serveurs pour un exemple (en tant qu'utilisateur postgres):
-bash-3.2$ cd $PGDATA/base
-bash-3.2$ ls | wc -l
9
-bash-3.2$ du -sh `ls`
6.9M 1
6.7M 12690
6.9M 12698
11M 16391
341M 17339
3.8G 17341
11M 17343
6.8M 19047
8.0K pgsql_tmp
Maintenant, si nous créons une nouvelle base de données, il devrait y avoir un sous-répertoire $ plus PGDATA / base:
-bash-3.2$ createdb foo
-bash-3.2$ ls | wc -l
10
-bash-3.2$ du -sh `ls`
6.9M 1
6.7M 12690
6.9M 12698
11M 16391
341M 17339
3.8G 17341
11M 17343
6.8M 19047
6.9M 83637
8.0K pgsql_tmp
Quel est ce que nous voyons ($ PGDATA / base / 83637 étant le sous-répertoire pour la nouvelle base de données).
Dropping cette base de données devrait également supprimer les fichiers de données:
-bash-3.2$ dropdb foo
-bash-3.2$ ls wc -l
9
-bash-3.2$ du -sh `ls`
6.9M 1
6.7M 12690
6.9M 12698
11M 16391
341M 17339
3.8G 17341
11M 17343
6.8M 19047
8.0K pgsql_tmp
Quel est ce que nous expect-- le répertoire PGDATA $ / base / 83637 est parti, il devrait y avoir rien à vide.
Êtes-vous sûr qu'il n'y a pas quelque chose d'autre manger votre espace disque? L'un de vos autres bases de données? les fichiers journaux?
Quelque chose que vous pourriez essayer serait:
-bash-3.2$ cd $PGDATA
-bash-3.2$ du -sh `ls` > ../pre_sizes
faire vos diverses choses de base de données, créer, supprimer, etc., puis:
-bash-3.2$ du -sh `ls` > ../post_sizes
pour avoir une idée où l'espace disque va.