PostgreSQL «taille des fichiers temporaires»

12

J'ai importé des données dans une nouvelle base de données (environ 600 millions de lignes d'horodatage, entier, double). J'ai ensuite créé quelques index et essayé de modifier certaines colonnes (en raison de problèmes d'espace), la base de données est vide.

Maintenant, pgAdmin III me dit que la " taille des fichiers temporaires " est 50G ~ +.

  1. Quels sont ces fichiers temporaires? sont-ils comme le journal des transactions SQL Server?
  2. Comment puis-je m'en débarrasser, il semble que la base de données soit beaucoup plus grande qu'elle ne devrait (la taille totale de la base de données est de 91 Go)

Utilisation de Posgres 9.4.1 sur un serveur Windows 2012.

Une capture d'écran de l'onglet Statistiques de la base de données:

Une capture d'écran de l'onglet Statistiques de la base de données

Ofiris
la source
Que représente la valeur de la colonne "taille des fichiers temporaires"?
Ofiris

Réponses:

12

Je n'ai rien trouvé dans la documentation de pgAdmin, mais le code source révèle la requête derrière ces entrées (ajoutée pour Postgres 9.2+):

Cela se résume à:

SELECT temp_files AS "Temporary files"
     , temp_bytes AS "Size of temporary files"
FROM   pg_stat_database db;

Et le manuel Postgres contient des détails surpg_stat_database :

tmp_files bigint Nombre de fichiers temporaires créés par des requêtes dans cette base de données. Tous les fichiers temporaires sont comptés, quelle que soit la raison pour laquelle le fichier temporaire a été créé (par exemple, le tri ou le hachage) et quel que soit le paramètre log_temp_files .

temp_bytes bigint Quantité totale de données écrites dans des fichiers temporaires par des requêtes dans cette base de données. Tous les fichiers temporaires sont comptés, quelle que soit la raison pour laquelle le fichier temporaire a été créé et quel que soit le paramètre log_temp_files .

Notez que ces valeurs ne contribuent pas à la taille de votre base de données. Mais ils indiquent que votre paramètre pour est work_mempeut-être trop bas, de sorte que de nombreuses opérations de tri se déversent sur le disque (ce qui est très lent par rapport à la RAM uniquement).

En relation:

Pour réellement compacter la taille de votre base de données:

Pour mesurer la taille:

En plus: WAL (Write Ahead Log) serait équivalent dans Postgres pour le journal des transactions dans SQL Server. Belle explication dans cette réponse connexe sur SO:

Erwin Brandstetter
la source
10

Selon:

http://www.postgresql.org/message-id/[email protected]

Le compteur temporaire (fichiers et espace utilisé) affiche un total de tous les fichiers temporaires utilisés depuis probablement la création du cluster. Il ne reflète pas l'espace actuel utilisé par les fichiers temporaires.

Mon système, par exemple, affiche près de 700 Go de fichiers temporaires utilisés, mais l'espace réel occupé par les fichiers temporaires dans /var/lib/pgsql/9.3/data/base/pgsql_tmp n'est actuellement que de 53 Mo.

Eduard Rozenberg
la source