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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top