PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Parametr konfiguracyjny work_mem w PostgreSQL w systemie Linux

Opublikowałem twój plan zapytań na explain.depesz.com, spójrz.

Szacunki narzędzia do planowania zapytań są w niektórych miejscach bardzo błędne. Czy uruchomiłeś ANALYZE ostatnio?

Przeczytaj rozdziały podręcznika dotyczące statystyk używanych przez planistę i planistę Stałe kosztów. Zwróć szczególną uwagę na rozdziały dotyczące random_page_cost i default_statistics_target .
Możesz spróbować:

ALTER TABLE diplomas ALTER COLUMN number SET STATISTICS 1000;
ANALYZE diplomas;

Lub przejdź jeszcze wyżej, aby uzyskać stół z 10 milionami rzędów. Zależy to od dystrybucji danych i rzeczywistych zapytań . Eksperyment. Wartość domyślna to 100, maksymalna to 10000.

W przypadku bazy danych tego rozmiaru, tylko 1 lub 5 MB work_mem generalnie nie wystarczają. Przeczytaj stronę Postgres Wiki na temat Tuning Postgres, do której link @aleroot.

Ponieważ Twoje zapytanie wymaga 430104kB pamięci na dysku zgodnie z EXPLAIN wyjście, musisz ustawić work_mem do około 500 MB lub więcej, aby umożliwić sortowanie w pamięci. Reprezentacja danych w pamięci wymaga więcej miejsca niż reprezentacja na dysku. Być może zainteresuje Cię to, co ostatnio napisał na ten temat Tom Lane.

Zwiększenie work_mem tylko trochę, jak próbowałeś, niewiele pomoże, a nawet spowolni. Ustawienie go na wysokim poziomie globalnym może nawet zaszkodzić, zwłaszcza przy równoczesnym dostępie. Wiele sesji może pozbawiać się nawzajem zasobów. Przydzielenie większej ilości do jednego celu zabiera pamięć drugiemu, jeśli zasób jest ograniczony. Najlepsza konfiguracja zależy od całej sytuacji.

Aby uniknąć skutków ubocznych, ustaw je wystarczająco wysoko lokalnie w sesji i tymczasowo dla zapytania:

SET work_mem = '500MB';

Następnie zresetuj go do wartości domyślnych:

RESET work_mem;

Lub użyj SET LOCAL aby ustawić go tylko na początek bieżącej transakcji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź, czy typ zdefiniowany przez użytkownika już istnieje w PostgreSQL

  2. Indeks wielokolumnowy na 3 polach o heterogenicznych typach danych

  3. PGError:ERROR:agregacje niedozwolone w klauzuli WHERE w zapytaniu AR obiektu i jego obiektów has_many

  4. Jak Sind() działa w PostgreSQL

  5. Jak działa POSITION() w PostgreSQL