Je travaille sur un système de développement et j'ai restauré une base de données, disons "foo", que j'utilise à des fins de développement. Alors que je travaille sur les problèmes, je viens de lancer DROP DATABASE foo. Cependant, j'ai rapidement réalisé que j'avais consommé tout l'espace sur mon disque. Merde.
VACUUM FULL, d'une autre base de données logique, libère-t-il de l'espace de la base de données que j'ai précédemment supprimée (foo)? J'ai essayé cela à partir d'une base de données logique différente, et l'espace libre a été récupéré, mais je ne pense pas que c'était suffisant pour tenir compte de tous les appels CREATE DATABASE / DROP DATABASE que j'ai faits. Il se peut que cela ait simplement VIDE la base de données logique à partir de laquelle j'ai couru.
Il doit y avoir un moyen de récupérer cet espace sans faire d'initialisation totale de la base de données?
ÉDITER
J'ai donc réinitialisé la base de données à partir d'une sauvegarde, en suivant approximativement ces étapes . Après la restauration, j'ai récupéré une tonne d'espace sur le disque! Cela fonctionne pour l'instant, mais toute aide concernant la façon de nettoyer une base de données supprimée serait toujours utile.
EDIT 2
J'ai donc réussi à collecter plus d'informations sur ce problème ... Voici ce que j'ai trouvé à titre d'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 donc que la nouvelle base de données occupait environ 9,6 Go sur le disque. Cependant, après l'avoir supprimé, l'espace disque récupéré n'a augmenté que de ~ 4,6 G. Donc, il y a environ 5 Go d'espace qui me font me demander ce qui se passe!?
Et il continue ce cycle lorsque je recrée, remplis et retombe.
Quelqu'un at-il une idée de ce qui subsiste après l'émission d'une commande "DROP DATABASE"?
la source
Réponses:
Essayez de
sudo lsof| grep deleted
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 n'importe quel processus. Un autre effet secondaire est celadf -h
etdu -sh /
diffère. En effet,du
examine le système de fichiers et résume la taille de tous les fichiers, etdf
examine le périphérique physique.Je viens d'avoir un problème avec une base de données qui n'a pas libéré d'espace après un
DROP table
et c'était la cause.La seule solution que je connaisse est de redémarrer la base de données. Vous pouvez peut-être essayer d'envoyer un rechargement (SIGHUP).
la source
lsof | grep deleted
pourboire était bon; à cela, ajoutez qu'il vous suffit de déterminer quelles sessions postgresql sont toujours actives et de les tuer pour libérer les fichiers. Dans mon cas, sur 500+ connexions actives, presque toutes en IDLE ou COMMIT, en tuer une seule, trouvée avecSELECT * FROM pg_stat_activity
et coincée dans une ANALYSE, était suffisante pour libérer les fichiers supprimés. ! 00 Go libérés.Je crois comprendre que lorsque vous supprimez une base de données, elle et ses fichiers disparaissent.
Sauf si vous utilisez des tablespaces, chaque base de données doit avoir ses données dans son propre sous-répertoire sous $ PGDATA / base. En utilisant un de mes serveurs pour un exemple (en tant qu'utilisateur postgres):
Maintenant, si nous créons une nouvelle base de données, il devrait y avoir un sous-répertoire supplémentaire sous $ PGDATA / base:
C'est ce que nous voyons ($ PGDATA / base / 83637 étant le sous-répertoire de la nouvelle base de données).
La suppression de cette base de données devrait également supprimer les fichiers de données:
C'est ce à quoi nous nous attendrions - le répertoire $ PGDATA / base / 83637 a disparu, il ne devrait rien y avoir à aspirer.
Êtes-vous sûr qu'il n'y a rien d'autre qui consomme votre espace disque? Une de vos autres bases de données? fichiers journaux?
Vous pourriez essayer de:
faites vos divers trucs de base de données, créez, supprimez, etc. puis:
pour avoir une idée de l’emplacement de l’espace disque.
la source
ls
" sur le répertoire $ PGDATA à la fois avant et après avoir fait l'ajout / la suppression de la base de données, car cela devrait signaler les autres répertoires qui augmentent et sautent.