Quando si esegue un drop table, PostgreSQL azzera il file fisico su disco corrispondente alla tabella specificata (pg_class.relfilenode) ma non cancella il file da disco. La ragione di ciò è nell'evitare di avere diverse possibili corse critiche, come ad esempio un riassegnamento di quel relfilenode ad un'altra tabella appena creata. In sostanza PostgreSQL tiene da parte una lista di file node disponibili per essere riciclati, e nel caso una drop table sia seguita da una create table, riutilizza il file node già allocato. In questo modo non si deve chiedere al sistema operativo di ricreare il file su disco, risparmiando tempo e risorse.
Ovviamente però potrebbe capitare che il file non sia mai piu' riciclato, ed è per questo che PostgreSQL quando giunge al prossimo checkpoint verifica la lista dei relfilenode riutilizzabili, e rimuove fisicamente da disco quelli che non stati riassegnati.
Nessun commento:
Posta un commento