postgres tempfile work_mem sort - ghdrako/doc_snipets GitHub Wiki
- Włączenie logowania tworzenia plików tymczasowych
log_line_prefix = '%m [%p] %u@%d '
%m
to timestamp,%p
to PID procesu,%u
to user,%d
to database.
# loguj wszystkie pliki tymczasowe większe niż 0 KB
log_temp_files = 0
# (opcjonalnie) jeśli chcesz logować tylko duże pliki, np. > 1 MB
# log_temp_files = 1024
Przeladowanie konfiguracji:
sudo systemctl reload postgresql
pg_ctl reload -D /ścieżka/do/data
2025-05-14 14:22:11.123 CEST [12345] app_user@mydb LOG: temporary file: path "base/pgsql_tmp/pgsql_tmp12345.0" size 10485760
- Wlaczenie rejestracji zapytan
log_statement = 'all' # loguje WSZYSTKIE zapytania
log_min_duration_statement = 0 # loguj WSZYSTKIE zapytania i ich czasy
2025-05-14 15:00:01.234 CEST [12345] user@db LOG: statement: SELECT * FROM big_table ORDER BY col;
...
2025-05-14 15:00:01.567 CEST [12345] user@db LOG: temporary file: path "base/pgsql_tmp/..." size 10485760
- Podnoszenie work_mem
- Globalnie w postgresql.conf:
work_mem = '16MB'
- dotyczy wszystkich nowych sesji.
ALTER ROLE twoj_uzytkownik SET work_mem = '32MB';
- Per-session ad hoc:
SET work_mem = '64MB';
Uwaga: work_mem jest przydzielane per-operacja w zapytaniu. Jeśli masz w jednym zapytaniu np. trzy sorty i dwa hash-joiny, każda z tych operacji może dostać do work_mem tyle pamięci. Uważaj więc, żeby nie przekroczyć pamięci RAM na serwerze.