PostgreSQL „rozmiar plików tymczasowych”

13

Zaimportowałem dane do nowej bazy danych (około 600m wierszy znacznika czasu, liczby całkowitej, podwójnej). Następnie utworzyłem niektóre indeksy i próbowałem zmienić niektóre kolumny (niektóre problemy z brakiem miejsca), baza danych jest odkurzana.

Teraz pgAdmin III mówi mi, że „ Rozmiar plików tymczasowych ” wynosi 50G ~ +.

  1. Co to są pliki tymczasowe? są to jak dziennik transakcji SQL Server?
  2. Jak się ich pozbyć, wydaje się, że baza danych jest znacznie większa niż powinna (całkowity rozmiar bazy danych to 91 GB)

Korzystanie z Posgres 9.4.1 na serwerze z systemem Windows 2012.

Zrzut ekranu karty statystyk bazy danych:

Zrzut ekranu karty statystyk bazy danych

Ofiris
źródło
Co oznacza wartość kolumny „rozmiar plików tymczasowych”?
Ofiris,

Odpowiedzi:

12

Nic nie znalazłem w dokumentacji pgAdmin, ale kod źródłowy ujawnia zapytanie za tymi wpisami (dodane do Postgres 9.2+):

Sprowadza się do:

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

A instrukcja Postgres zawiera szczegółowe informacje na tematpg_stat_database :

tmp_files bigint Liczba plików tymczasowych utworzonych przez zapytania w tej bazie danych. Wszystkie pliki tymczasowe są liczone, niezależnie od tego, dlaczego plik tymczasowy został utworzony (np. Sortowanie lub mieszanie) i niezależnie od ustawienia log_temp_files .

temp_bytes bigint Łączna ilość danych zapisanych do plików tymczasowych według zapytań w tej bazie danych. Wszystkie pliki tymczasowe są liczone, niezależnie od tego, dlaczego plik tymczasowy został utworzony, i niezależnie od ustawienia log_temp_files .

Pamiętaj, że te wartości nie wpływają na rozmiar bazy danych. Wskazują jednak, że twoje ustawienie dla work_memmoże być zbyt niskie, więc wiele operacji sortowania przelewa się na dysk (co jest bardzo wolne w porównaniu do samej pamięci RAM).

Związane z:

Aby faktycznie skompaktować rozmiar bazy danych:

Aby zmierzyć rozmiar:

Poza tym: WAL (Write Ahead Log) byłby równoważny w Postgres dla dziennika transakcji w SQL Server. Ładne wyjaśnienie w tej pokrewnej odpowiedzi na temat SO:

Erwin Brandstetter
źródło
10

Według:

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

Licznik temp (używane pliki i miejsce) pokazuje w sumie wszystkie pliki tymczasowe używane od czasu prawdopodobnie utworzenia klastra. Nie odzwierciedla bieżącego miejsca używanego przez pliki tymczasowe.

Na przykład mój system pokazuje prawie 700 GB używanych plików tymczasowych, ale faktyczne miejsce zajmowane przez pliki tymczasowe w /var/lib/pgsql/9.3/data/base/pgsql_tmp wynosi obecnie tylko 53 MB.

Eduard Rozenberg
źródło