it-swarm.com.de

PostgreSQL "Größe temporärer Dateien"

Ich habe Daten in eine neue Datenbank importiert (ca. 600 m Zeilen Zeitstempel, Ganzzahl, Doppel). Ich habe dann einige Indizes erstellt und versucht, einige Spalten zu ändern (einige Probleme mit Speicherplatz). Die Datenbank wird gesaugt.

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

  1. Was sind diese temporären Dateien? Sind diese wie das 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:

(A screenshot of the database statistics tab

13
Ofiris

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

Es läuft darauf 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 zu pg_stat_database :

tmp_filesbigint 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_bytesbigint Gesamtmenge der Daten, die durch 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. Aber sie zeigen an, dass Ihre Einstellung für work_mem ist möglicherweise zu niedrig, so dass viele Sortiervorgänge auf die Festplatte übertragen werden (was sehr langsam ist, verglichen mit nur RAM).

Verbunden:

So komprimieren Sie die Größe Ihrer Datenbank:

So messen Sie die Größe:

Nebenbei: [~ # ~] wal [~ # ~] (Write Ahead Log) wäre in Postgres für das äquivalent Transaktionsprotokoll in SQL Server. Schöne Erklärung in dieser verwandten Antwort auf SO:

12

Gemäß:

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

Der temporäre Zähler (Dateien und verwendeter Speicherplatz) zeigt eine Summe aller temporären Dateien an, die seit der wahrscheinlichen Clustererstellung verwendet wurden. Es spiegelt nicht den aktuellen Speicherplatz wider, der von temporären Dateien verwendet wird.

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

10