Domanda

Sto lavorando su un sistema dev, e sono stato il ripristino di un database, dico "pippo", che sto usando per scopi dev. Come sto lavorando attraverso i nodi, ho appena stato in esecuzione DROP DATABASE foo. Tuttavia, ho subito capito che ho mangiato tutto lo spazio sul mio disco. Crap.

non VUOTO PIENO, da un database logica diversa, liberare spazio dal database che ho già lasciato cadere (foo)? Ho provato questo da un database logica diversa, e lo spazio libero è stata bonificata, ma non credo che fosse sufficiente per tenere conto di tutti i CREATE DATABASE / DROP DATABASE chiamate che ho fatto. Si potrebbe avere appena VACUUM'ed la logica del database mi sono imbattuto da.

Ci deve essere un modo per recuperare quello spazio senza fare un init totale del database?

Modifica

Così ho reinizializzata il database da un backup, più o meno a seguito questa procedura . Dopo il ripristino, ho recuperato un sacco di spazio su disco! Questo funziona per ora, ma ogni aiuto riguardo alle modalità di pulitura di un database di cadere ancora sarebbe utile.

Modifica 2

Così sono riuscito a raccogliere qualche informazione in più su questo problema ... Ecco quello che mi è venuta in mente come un esempio:

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

Quindi, mi sembra che il nuovo DB prese ~ 9.6 GB su disco. Tuttavia, dopo aver lasciato esso, lo spazio su disco bonificata è cresciuto solo da ~ 4.6g. Quindi, c'è circa 5 GB di spazio che mi domando che cosa sta succedendo!?

E continua questo ciclo quando ho ricreare, popolare, e cadere di nuovo.

Qualcuno ha qualche idea di cosa sta persistente dopo un comando "DROP DATABASE" viene emesso?

Nessuna soluzione corretta

Altri suggerimenti

Prova sudo lsof| grep deleted e controllare se appare processo di PostgreSQL. Questo comando cerca i file che sono stati cancellati, ma i suoi descrittori di file sono ancora aperte da qualsiasi processo. Un altro effetto collaterale è che df -h e du -sh / differisce. Questo perché gli sguardi du al file system e riassumono le dimensioni di tutti i file, e guarda df al dispositivo fisico.

Ho appena avuto un problema con un database che non liberare qualsiasi spazio dopo una DROP table e che è stata la causa.

L'unica soluzione che conosco è quello di riavviare il database. Forse si può provare a inviare una ricarica (SIGHUP).

La mia comprensione è che quando si rilascia un database allora, ed il suoi file, ci sono più.

A meno che non si sta utilizzando tabelle poi ogni database dovrebbe avere di dati in proprio sottodirectory è sotto $ PGDATA / base. Utilizzando uno dei miei assistenti per un esempio (come utente 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

Ora, se creiamo un nuovo database, allora ci dovrebbe essere un altro sottodirectory sotto $ 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

che è quello che vediamo ($ PGDATA / base / 83.637 essendo la sottodirectory per il nuovo database).

La caduta quel database dovrebbe anche eliminare i file di dati:

-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

che è quello che avremmo expect-- directory $ PGDATA / base / 83.637 è andato, non ci dovrebbe essere nulla al vuoto.

Sei sicuro che non ci sia qualcosa di diverso di mangiare il vostro spazio su disco? Uno dei tuoi altri database? i file di log?

Una cosa che si potrebbe provare sarebbe quello di:

-bash-3.2$ cd $PGDATA
-bash-3.2$ du -sh `ls` > ../pre_sizes

fare le tue cose varie database, creare, goccia, ecc e poi:

-bash-3.2$ du -sh `ls` > ../post_sizes

per ottenere qualche idea di dove lo spazio su disco è in corso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top