PostgreSQL "Größe temporärer Dateien"

12

Ich habe Daten in eine neue Datenbank importiert (ca. 600 m Zeilen mit Zeitstempel, Ganzzahl, Doppel). Ich habe dann ein paar Indizes erstellt und versucht, ein paar Spalten zu ändern (es sind einige Speicherplatzprobleme aufgetreten). Die Datenbank wurde gesaugt.

Jetzt sagt mir pgAdmin III, dass die " Größe der temporären Dateien " 50G ~ + ist.

  1. Was sind diese temporären Dateien? sind diese wie SQL Server-Transaktionsprotokoll?
  2. Wie kann ich sie loswerden, es scheint, dass die Datenbank viel größer ist als sie sollte (die Gesamtgröße der Datenbank beträgt 91 GB)

Verwenden von Posgres 9.4.1 auf einem Windows 2012-Server.

Ein Screenshot der Registerkarte "Datenbankstatistik":

Ein Screenshot der Registerkarte "Datenbankstatistik"

Ofiris
quelle
Was bedeutet der Spaltenwert "Größe temporärer Dateien"?
Ofiris

Antworten:

12

Ich habe nichts in der pgAdmin-Dokumentation gefunden, aber der Quellcode zeigt die Abfrage hinter diesen Einträgen (hinzugefügt für Postgres 9.2+):

Es läuft auf Folgendes hinaus:

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

Und das Postgres-Handbuch enthält Details fürpg_stat_database :

tmp_files bigint Anzahl der temporären Dateien, die durch Abfragen in dieser Datenbank erstellt wurden. Alle temporären Dateien werden gezählt, unabhängig davon, warum die temporäre Datei erstellt wurde (z. B. Sortieren oder Hashing) und unabhängig von der Einstellung log_temp_files .

temp_bytes bigint Gesamtmenge der Daten, die von Abfragen in dieser Datenbank in temporäre Dateien geschrieben wurden. Alle temporären Dateien werden gezählt, unabhängig davon, warum die temporäre Datei erstellt wurde und unabhängig von der Einstellung log_temp_files .

Beachten Sie, dass diese Werte nicht zur Größe Ihrer Datenbank beitragen. Sie weisen jedoch darauf hin, dass Ihre Einstellung für work_memmöglicherweise zu niedrig ist, sodass viele Sortiervorgänge auf die Festplatte übertragen werden (was im Vergleich zu nur RAM sehr langsam ist).

Verbunden:

So komprimieren Sie die Größe Ihrer Datenbank:

Größe messen:

Abgesehen davon: WAL (Write Ahead Log) entspricht in Postgres dem Transaktionsprotokoll in SQL Server. Schöne Erklärung in dieser verwandten Antwort zu SO:

Erwin Brandstetter
quelle
10

Gemäß:

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

Der Zeitzähler (verwendete Dateien und Speicherplatz) zeigt die Gesamtzahl aller seit der wahrscheinlich Clustererstellung verwendeten Zeitdateien an. Es gibt nicht den aktuellen Speicherplatz an, der von temporären Dateien verwendet wird.

Mein System zeigt zum Beispiel fast 700 GB an verwendeten temporären Dateien, aber der tatsächliche Speicherplatz, der von temporären Dateien in /var/lib/pgsql/9.3/data/base/pgsql_tmp beansprucht wird, beträgt derzeit nur 53 MB.

Eduard Rozenberg
quelle