Udostępnij za pomocą


Użycie zasobów/pamięć

autovacuum_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych liczba całkowita
Wartość domyślna -1
Dozwolone wartości -1-2097151
Typ parametru dynamic
Dokumentacja autovacuum_work_mem

commit_timestamp_buffers

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanej puli używanej dla pamięci podręcznej sygnatury czasowej zatwierdzenia. Określ wartość 0, aby ta wartość została określona jako ułamek shared_buffers.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 0-131072
Typ parametru statyczny
Dokumentacja commit_timestamp_buffers

typ_pamięci_współdzielonej_dynamicznie

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczenie
Wartość domyślna posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja typ dynamicznej pamięci współdzielonej

mnożnik_pamięci_hashowania (hash_mem_multiplier)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wielokrotność "work_mem" do użycia w tabelach skrótów.
Typ danych numeryczne
Wartość domyślna 2
Dozwolone wartości 1-1000
Typ parametru dynamic
Dokumentacja hash_mem_multiplier

duże strony

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Korzystanie z ogromnych stron w systemie Linux lub Windows.
Typ danych wyliczenie
Wartość domyślna try
Dozwolone wartości on,off,try
Typ parametru statyczny
Dokumentacja huge_pages

Description

Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.

Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:

  • Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
  • Skracają czas potrzebny do zarządzania pamięcią.

W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.

Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.

Rekomendacje

  • W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
  • Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj huge_pages ustawienie na TRY potrzeby bezproblemowego przejścia i optymalnej wydajności.

Uwagi specyficzne dla platformy Azure

W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.

wielki_rozmiar_strony

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Rozmiar ogromnej strony, która powinna być żądana.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja huge_page_size

io_combine_limit

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ogranicz rozmiar odczytów i zapisów danych.
Typ danych liczba całkowita
Wartość domyślna 16
Dozwolone wartości 1-128
Typ parametru dynamic
Dokumentacja io_combine_limit

io_max_combine_limit

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Globalny limit serwera, który ogranicza io_combine_limit.
Typ danych liczba całkowita
Wartość domyślna 16
Dozwolone wartości 1-128
Typ parametru dynamic
Dokumentacja io_max_combine_limit

maksymalna współbieżność IO

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Maksymalna liczba operacji I/O, które jeden proces może wykonać jednocześnie.
Typ danych liczba całkowita
Wartość domyślna 64
Dozwolone wartości -1-1024
Typ parametru statyczny
Dokumentacja io_max_concurrency

metoda_IO

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera metodę wykonywania asynchronicznych operacji we/wy.
Typ danych wyliczenie
Wartość domyślna worker
Dozwolone wartości worker,sync
Typ parametru statyczny
Dokumentacja io_method

io_workers

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Liczba procesów roboczych I/O dla io_method=worker.
Typ danych liczba całkowita
Wartość domyślna 3
Dozwolone wartości 1-32
Typ parametru dynamic
Dokumentacja io_workers

logical_decoding_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego. Ta ilość pamięci może być używana przez każdy wewnętrzny bufor zmiany kolejki, zanim zostanie przelana na dysk.
Typ danych liczba całkowita
Wartość domyślna 65536
Dozwolone wartości 64-2147483647
Typ parametru dynamic
Dokumentacja logical_decoding_work_mem

pamięć_prac_utrzymaniowych

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną ilość pamięci do użycia na potrzeby operacji konserwacji. Obejmuje to operacje, takie jak VACUUM i CREATE INDEX.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 1024-2097151
Typ parametru dynamic
Dokumentacja maintenance_work_mem

Description

maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.

![UWAGA] Ustawienie maintenance_work_mem na zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie maintenance_work_mem wartości, należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci.
  • Separacja pamięci dla autovacuum: możesz użyć ustawienia autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiór maintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.

Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci pamięć_prac_utrzymaniowych
2 GiB 99 328 KiB
4 GiB 157 696 KiB
8 GiB 216 064 KiB
16 GiB 274,432 KiB
32 GiB 332 800 KiB
48 GiB 367,616 KiB
64 GiB 392 192 KiB
80 GiB 410 624 KiB
128 GiB 450 560 KiB
160 GiB 468 992 KiB
192 GiB 484 352 KiB
256 GiB 508 928 KiB
384 GiB 542,720 KiB
432 GiB 552 960 KiB
672 GiB 590 848 KiB

maksymalna_liczba_przygotowanych_transakcji

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0-262143
Typ parametru statyczny
Dokumentacja max_prepared_transactions

max_stack_depth

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych liczba całkowita
Wartość domyślna 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

min_dynamic_shared_memory

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja min_dynamic_shared_memory

bufory_członków_multixact

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanego bufora pamięci używanego dla pamięci podręcznej członków MultiXact.
Typ danych liczba całkowita
Wartość domyślna 32
Dozwolone wartości 16-131072
Typ parametru statyczny
Dokumentacja multixact_member_buffers

multixact_offset_buffers

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanej puli buforowej używanej do pamięci podręcznej przesunięcia MultiXact.
Typ danych liczba całkowita
Wartość domyślna 16
Dozwolone wartości 16-131072
Typ parametru statyczny
Dokumentacja multixact_offset_buffers

notify_buffers

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanej puli używanej dla pamięci podręcznej komunikatów LISTEN/NOTIFY.
Typ danych liczba całkowita
Wartość domyślna 16
Dozwolone wartości 16-131072
Typ parametru statyczny
Dokumentacja notify_buffers

bufory do serializacji

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanej buforowej puli używanej dla pamięci podręcznej transakcji o poziomie serializowalnym.
Typ danych liczba całkowita
Wartość domyślna 32
Dozwolone wartości 16-131072
Typ parametru statyczny
Dokumentacja serializable_buffers

shared_buffers (pamięć współdzielona)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia liczbę pamięci udostępnionej używanych przez serwer.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru statyczny
Dokumentacja shared_buffers

Description

Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.

Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.

W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.

W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci shared_buffers (pamięć współdzielona)
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

typ_pamięci_współdzielonej

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej.
Typ danych wyliczenie
Wartość domyślna mmap
Dozwolone wartości mmap
Typ parametru tylko do odczytu
Dokumentacja typ_pamięci_współdzielonej

subtransaction_buffers

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanej puli buforów stosowanej do pamięci podręcznej podtransakcji. Określ wartość 0, aby ta wartość została określona jako ułamek shared_buffers.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 0-131072
Typ parametru statyczny
Dokumentacja subtransaction_buffers

pam_tymczasowe (temp_buffers)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę tymczasowych buforów używanych przez każdą sesję.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamic
Dokumentacja temp_buffers

bufory_transakcji

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanej puli buforowej, używanej do pamięci podręcznej stanu transakcji. Określ wartość 0, aby ta wartość została określona jako ułamek shared_buffers.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 0-131072
Typ parametru statyczny
Dokumentacja bufory_transakcji

vacuum_buffer_usage_limit

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar puli dla funkcji VACUUM, ANALYZE i autovacuum.
Typ danych liczba całkowita
Wartość domyślna 2048
Dozwolone wartości 0-16777216
Typ parametru dynamic
Dokumentacja vacuum_buffer_usage_limit

work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną ilość pamięci do użycia w obszarach roboczych zapytań. Taka ilość pamięci może być używana przez każdą operację wewnętrznego sortowania i tablicę skrótów zanim nastąpi przełączenie się na tymczasowe pliki dyskowe.
Typ danych liczba całkowita
Wartość domyślna 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamic
Dokumentacja work_mem

Description

Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.

W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.

Kwestie kluczowe

  • Pamięć połączenia prywatnego: work_mem jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używa shared_buffers.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają work_mem. Proste zapytania, takie jak SELECT 1, raczej nie będą wymagać work_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementu work_mem.
  • Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu work_mem.

Monitorowanie i dostosowywanie work_mem

Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:

  • Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia work_mem.
  • Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie

Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:

  • Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie work_mem wartości dla tego użytkownika. ALTER ROLE Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.

  • Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie work_mem wartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj polecenia ALTER FUNCTION lub ALTER PROCEDURE.

  • Poziom bazy danych: zmień work_mem na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.

  • Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie work_mem wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonej work_mem wartości.

Określanie minimalnej wartości work_mem dla operacji sortowania

Aby znaleźć minimalną work_mem wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:

  1. Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
  2. Ustaw wartość początkową work_mem nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak: SET work_mem TO '25MB'.
  3. Uruchom EXPLAIN ANALYZE na problematycznym zapytaniu w tej samej sesji.
  4. Przejrzyj dane wyjściowe dla elementu "Sort Method: quicksort Memory: xkB". Jeśli wskazuje "external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, aż work_mem zostanie wyświetlone. Pojawienie się "quicksort Memory" sygnału wskazuje, że zapytanie działa teraz w pamięci.
  5. Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.

autovacuum_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych liczba całkowita
Wartość domyślna -1
Dozwolone wartości -1-2097151
Typ parametru dynamic
Dokumentacja autovacuum_work_mem

commit_timestamp_buffers

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanej puli używanej dla pamięci podręcznej sygnatury czasowej zatwierdzenia. Określ wartość 0, aby ta wartość została określona jako ułamek shared_buffers.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 0-131072
Typ parametru statyczny
Dokumentacja commit_timestamp_buffers

typ_pamięci_współdzielonej_dynamicznie

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczenie
Wartość domyślna posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja typ dynamicznej pamięci współdzielonej

mnożnik_pamięci_hashowania (hash_mem_multiplier)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wielokrotność "work_mem" do użycia w tabelach skrótów.
Typ danych numeryczne
Wartość domyślna 2
Dozwolone wartości 1-1000
Typ parametru dynamic
Dokumentacja hash_mem_multiplier

duże strony

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Korzystanie z ogromnych stron w systemie Linux lub Windows.
Typ danych wyliczenie
Wartość domyślna try
Dozwolone wartości on,off,try
Typ parametru statyczny
Dokumentacja huge_pages

Description

Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.

Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:

  • Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
  • Skracają czas potrzebny do zarządzania pamięcią.

W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.

Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.

Rekomendacje

  • W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
  • Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj huge_pages ustawienie na TRY potrzeby bezproblemowego przejścia i optymalnej wydajności.

Uwagi specyficzne dla platformy Azure

W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.

wielki_rozmiar_strony

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Rozmiar ogromnej strony, która powinna być żądana.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja huge_page_size

io_combine_limit

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ogranicz rozmiar odczytów i zapisów danych.
Typ danych liczba całkowita
Wartość domyślna 16
Dozwolone wartości 16
Typ parametru tylko do odczytu
Dokumentacja io_combine_limit

logical_decoding_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego. Ta ilość pamięci może być używana przez każdy wewnętrzny bufor zmiany kolejki, zanim zostanie przelana na dysk.
Typ danych liczba całkowita
Wartość domyślna 65536
Dozwolone wartości 64-2147483647
Typ parametru dynamic
Dokumentacja logical_decoding_work_mem

pamięć_prac_utrzymaniowych

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną ilość pamięci do użycia na potrzeby operacji konserwacji. Obejmuje to operacje, takie jak VACUUM i CREATE INDEX.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 1024-2097151
Typ parametru dynamic
Dokumentacja maintenance_work_mem

Description

maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.

![UWAGA] Ustawienie maintenance_work_mem na zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie maintenance_work_mem wartości, należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci.
  • Separacja pamięci dla autovacuum: możesz użyć ustawienia autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiór maintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.

Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci pamięć_prac_utrzymaniowych
2 GiB 99 328 KiB
4 GiB 157 696 KiB
8 GiB 216 064 KiB
16 GiB 274,432 KiB
32 GiB 332 800 KiB
48 GiB 367,616 KiB
64 GiB 392 192 KiB
80 GiB 410 624 KiB
128 GiB 450 560 KiB
160 GiB 468 992 KiB
192 GiB 484 352 KiB
256 GiB 508 928 KiB
384 GiB 542,720 KiB
432 GiB 552 960 KiB
672 GiB 590 848 KiB

maksymalna_liczba_przygotowanych_transakcji

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0-262143
Typ parametru statyczny
Dokumentacja max_prepared_transactions

max_stack_depth

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych liczba całkowita
Wartość domyślna 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

min_dynamic_shared_memory

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja min_dynamic_shared_memory

bufory_członków_multixact

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanego bufora pamięci używanego dla pamięci podręcznej członków MultiXact.
Typ danych liczba całkowita
Wartość domyślna 32
Dozwolone wartości 16-131072
Typ parametru statyczny
Dokumentacja multixact_member_buffers

multixact_offset_buffers

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanej puli buforowej używanej do pamięci podręcznej przesunięcia MultiXact.
Typ danych liczba całkowita
Wartość domyślna 16
Dozwolone wartości 16-131072
Typ parametru statyczny
Dokumentacja multixact_offset_buffers

notify_buffers

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanej puli używanej dla pamięci podręcznej komunikatów LISTEN/NOTIFY.
Typ danych liczba całkowita
Wartość domyślna 16
Dozwolone wartości 16-131072
Typ parametru statyczny
Dokumentacja notify_buffers

bufory do serializacji

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanej buforowej puli używanej dla pamięci podręcznej transakcji o poziomie serializowalnym.
Typ danych liczba całkowita
Wartość domyślna 32
Dozwolone wartości 16-131072
Typ parametru statyczny
Dokumentacja serializable_buffers

shared_buffers (pamięć współdzielona)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia liczbę pamięci udostępnionej używanych przez serwer.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru statyczny
Dokumentacja shared_buffers

Description

Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.

Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.

W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.

W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci shared_buffers (pamięć współdzielona)
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

typ_pamięci_współdzielonej

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej.
Typ danych wyliczenie
Wartość domyślna mmap
Dozwolone wartości mmap
Typ parametru tylko do odczytu
Dokumentacja typ_pamięci_współdzielonej

subtransaction_buffers

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanej puli buforów stosowanej do pamięci podręcznej podtransakcji. Określ wartość 0, aby ta wartość została określona jako ułamek shared_buffers.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 0-131072
Typ parametru statyczny
Dokumentacja subtransaction_buffers

pam_tymczasowe (temp_buffers)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę tymczasowych buforów używanych przez każdą sesję.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamic
Dokumentacja temp_buffers

bufory_transakcji

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar dedykowanej puli buforowej, używanej do pamięci podręcznej stanu transakcji. Określ wartość 0, aby ta wartość została określona jako ułamek shared_buffers.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 0-131072
Typ parametru statyczny
Dokumentacja bufory_transakcji

vacuum_buffer_usage_limit

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar puli dla funkcji VACUUM, ANALYZE i autovacuum.
Typ danych liczba całkowita
Wartość domyślna 2048
Dozwolone wartości 0-16777216
Typ parametru dynamic
Dokumentacja vacuum_buffer_usage_limit

work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną ilość pamięci do użycia w obszarach roboczych zapytań. Taka ilość pamięci może być używana przez każdą operację wewnętrznego sortowania i tablicę skrótów zanim nastąpi przełączenie się na tymczasowe pliki dyskowe.
Typ danych liczba całkowita
Wartość domyślna 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamic
Dokumentacja work_mem

Description

Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.

W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.

Kwestie kluczowe

  • Pamięć połączenia prywatnego: work_mem jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używa shared_buffers.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają work_mem. Proste zapytania, takie jak SELECT 1, raczej nie będą wymagać work_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementu work_mem.
  • Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu work_mem.

Monitorowanie i dostosowywanie work_mem

Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:

  • Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia work_mem.
  • Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie

Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:

  • Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie work_mem wartości dla tego użytkownika. ALTER ROLE Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.

  • Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie work_mem wartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj polecenia ALTER FUNCTION lub ALTER PROCEDURE.

  • Poziom bazy danych: zmień work_mem na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.

  • Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie work_mem wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonej work_mem wartości.

Określanie minimalnej wartości work_mem dla operacji sortowania

Aby znaleźć minimalną work_mem wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:

  1. Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
  2. Ustaw wartość początkową work_mem nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak: SET work_mem TO '25MB'.
  3. Uruchom EXPLAIN ANALYZE na problematycznym zapytaniu w tej samej sesji.
  4. Przejrzyj dane wyjściowe dla elementu "Sort Method: quicksort Memory: xkB". Jeśli wskazuje "external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, aż work_mem zostanie wyświetlone. Pojawienie się "quicksort Memory" sygnału wskazuje, że zapytanie działa teraz w pamięci.
  5. Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.

autovacuum_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych liczba całkowita
Wartość domyślna -1
Dozwolone wartości -1-2097151
Typ parametru dynamic
Dokumentacja autovacuum_work_mem

typ_pamięci_współdzielonej_dynamicznie

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczenie
Wartość domyślna posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja typ dynamicznej pamięci współdzielonej

mnożnik_pamięci_hashowania (hash_mem_multiplier)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wiele work_mem do użycia w przypadku tabel skrótów.
Typ danych numeryczne
Wartość domyślna 2
Dozwolone wartości 1-1000
Typ parametru dynamic
Dokumentacja hash_mem_multiplier

duże strony

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne.
Typ danych wyliczenie
Wartość domyślna try
Dozwolone wartości on,off,try
Typ parametru statyczny
Dokumentacja huge_pages

Description

Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.

Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:

  • Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
  • Skracają czas potrzebny do zarządzania pamięcią.

W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.

Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.

Rekomendacje

  • W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
  • Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj huge_pages ustawienie na TRY potrzeby bezproblemowego przejścia i optymalnej wydajności.

Uwagi specyficzne dla platformy Azure

W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.

wielki_rozmiar_strony

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Rozmiar ogromnej strony, która powinna być żądana.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja huge_page_size

logical_decoding_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego.
Typ danych liczba całkowita
Wartość domyślna 65536
Dozwolone wartości 64-2147483647
Typ parametru dynamic
Dokumentacja logical_decoding_work_mem

pamięć_prac_utrzymaniowych

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 1024-2097151
Typ parametru dynamic
Dokumentacja maintenance_work_mem

Description

maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.

![UWAGA] Ustawienie maintenance_work_mem na zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie maintenance_work_mem wartości, należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci.
  • Separacja pamięci dla autovacuum: możesz użyć ustawienia autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiór maintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.

Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci pamięć_prac_utrzymaniowych
2 GiB 99 328 KiB
4 GiB 157 696 KiB
8 GiB 216 064 KiB
16 GiB 274,432 KiB
32 GiB 332 800 KiB
48 GiB 367,616 KiB
64 GiB 392 192 KiB
80 GiB 410 624 KiB
128 GiB 450 560 KiB
160 GiB 468 992 KiB
192 GiB 484 352 KiB
256 GiB 508 928 KiB
384 GiB 542,720 KiB
432 GiB 552 960 KiB
672 GiB 590 848 KiB

maksymalna_liczba_przygotowanych_transakcji

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0-262143
Typ parametru statyczny
Dokumentacja max_prepared_transactions

max_stack_depth

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych liczba całkowita
Wartość domyślna 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

min_dynamic_shared_memory

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja min_dynamic_shared_memory

shared_buffers (pamięć współdzielona)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru statyczny
Dokumentacja shared_buffers

Description

Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.

Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.

W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.

W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci shared_buffers (pamięć współdzielona)
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

typ_pamięci_współdzielonej

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej.
Typ danych wyliczenie
Wartość domyślna mmap
Dozwolone wartości mmap
Typ parametru tylko do odczytu
Dokumentacja typ_pamięci_współdzielonej

pam_tymczasowe (temp_buffers)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamic
Dokumentacja temp_buffers

vacuum_buffer_usage_limit

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia rozmiar puli dla funkcji VACUUM, ANALYZE i autovacuum.
Typ danych liczba całkowita
Wartość domyślna 256
Dozwolone wartości 0-16777216
Typ parametru dynamic
Dokumentacja vacuum_buffer_usage_limit

work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego.
Typ danych liczba całkowita
Wartość domyślna 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamic
Dokumentacja work_mem

Description

Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.

W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.

Kwestie kluczowe

  • Pamięć połączenia prywatnego: work_mem jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używa shared_buffers.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają work_mem. Proste zapytania, takie jak SELECT 1, raczej nie będą wymagać work_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementu work_mem.
  • Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu work_mem.

Monitorowanie i dostosowywanie work_mem

Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:

  • Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia work_mem.
  • Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie

Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:

  • Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie work_mem wartości dla tego użytkownika. ALTER ROLE Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.

  • Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie work_mem wartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj polecenia ALTER FUNCTION lub ALTER PROCEDURE.

  • Poziom bazy danych: zmień work_mem na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.

  • Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie work_mem wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonej work_mem wartości.

Określanie minimalnej wartości work_mem dla operacji sortowania

Aby znaleźć minimalną work_mem wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:

  1. Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
  2. Ustaw wartość początkową work_mem nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak: SET work_mem TO '25MB'.
  3. Uruchom EXPLAIN ANALYZE na problematycznym zapytaniu w tej samej sesji.
  4. Przejrzyj dane wyjściowe dla elementu "Sort Method: quicksort Memory: xkB". Jeśli wskazuje "external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, aż work_mem zostanie wyświetlone. Pojawienie się "quicksort Memory" sygnału wskazuje, że zapytanie działa teraz w pamięci.
  5. Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.

autovacuum_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych liczba całkowita
Wartość domyślna -1
Dozwolone wartości -1-2097151
Typ parametru dynamic
Dokumentacja autovacuum_work_mem

typ_pamięci_współdzielonej_dynamicznie

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczenie
Wartość domyślna posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja typ dynamicznej pamięci współdzielonej

mnożnik_pamięci_hashowania (hash_mem_multiplier)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wiele work_mem do użycia w przypadku tabel skrótów.
Typ danych numeryczne
Wartość domyślna 2
Dozwolone wartości 1-1000
Typ parametru dynamic
Dokumentacja hash_mem_multiplier

duże strony

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne.
Typ danych wyliczenie
Wartość domyślna try
Dozwolone wartości on,off,try
Typ parametru statyczny
Dokumentacja huge_pages

Description

Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.

Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:

  • Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
  • Skracają czas potrzebny do zarządzania pamięcią.

W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.

Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.

Rekomendacje

  • W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
  • Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj huge_pages ustawienie na TRY potrzeby bezproblemowego przejścia i optymalnej wydajności.

Uwagi specyficzne dla platformy Azure

W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.

wielki_rozmiar_strony

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Rozmiar ogromnej strony, która powinna być żądana.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja huge_page_size

logical_decoding_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego.
Typ danych liczba całkowita
Wartość domyślna 65536
Dozwolone wartości 64-2147483647
Typ parametru dynamic
Dokumentacja logical_decoding_work_mem

pamięć_prac_utrzymaniowych

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 1024-2097151
Typ parametru dynamic
Dokumentacja maintenance_work_mem

Description

maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.

![UWAGA] Ustawienie maintenance_work_mem na zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie maintenance_work_mem wartości, należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci.
  • Separacja pamięci dla autovacuum: możesz użyć ustawienia autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiór maintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.

Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci pamięć_prac_utrzymaniowych
2 GiB 99 328 KiB
4 GiB 157 696 KiB
8 GiB 216 064 KiB
16 GiB 274,432 KiB
32 GiB 332 800 KiB
48 GiB 367,616 KiB
64 GiB 392 192 KiB
80 GiB 410 624 KiB
128 GiB 450 560 KiB
160 GiB 468 992 KiB
192 GiB 484 352 KiB
256 GiB 508 928 KiB
384 GiB 542,720 KiB
432 GiB 552 960 KiB
672 GiB 590 848 KiB

maksymalna_liczba_przygotowanych_transakcji

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0-262143
Typ parametru statyczny
Dokumentacja max_prepared_transactions

max_stack_depth

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych liczba całkowita
Wartość domyślna 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

min_dynamic_shared_memory

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja min_dynamic_shared_memory

shared_buffers (pamięć współdzielona)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru statyczny
Dokumentacja shared_buffers

Description

Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.

Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.

W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.

W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci shared_buffers (pamięć współdzielona)
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

typ_pamięci_współdzielonej

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej.
Typ danych wyliczenie
Wartość domyślna mmap
Dozwolone wartości mmap
Typ parametru tylko do odczytu
Dokumentacja typ_pamięci_współdzielonej

pam_tymczasowe (temp_buffers)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamic
Dokumentacja temp_buffers

work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego.
Typ danych liczba całkowita
Wartość domyślna 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamic
Dokumentacja work_mem

Description

Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.

W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.

Kwestie kluczowe

  • Pamięć połączenia prywatnego: work_mem jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używa shared_buffers.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają work_mem. Proste zapytania, takie jak SELECT 1, raczej nie będą wymagać work_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementu work_mem.
  • Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu work_mem.

Monitorowanie i dostosowywanie work_mem

Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:

  • Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia work_mem.
  • Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie

Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:

  • Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie work_mem wartości dla tego użytkownika. ALTER ROLE Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.

  • Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie work_mem wartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj polecenia ALTER FUNCTION lub ALTER PROCEDURE.

  • Poziom bazy danych: zmień work_mem na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.

  • Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie work_mem wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonej work_mem wartości.

Określanie minimalnej wartości work_mem dla operacji sortowania

Aby znaleźć minimalną work_mem wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:

  1. Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
  2. Ustaw wartość początkową work_mem nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak: SET work_mem TO '25MB'.
  3. Uruchom EXPLAIN ANALYZE na problematycznym zapytaniu w tej samej sesji.
  4. Przejrzyj dane wyjściowe dla elementu "Sort Method: quicksort Memory: xkB". Jeśli wskazuje "external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, aż work_mem zostanie wyświetlone. Pojawienie się "quicksort Memory" sygnału wskazuje, że zapytanie działa teraz w pamięci.
  5. Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.

autovacuum_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych liczba całkowita
Wartość domyślna -1
Dozwolone wartości -1-2097151
Typ parametru dynamic
Dokumentacja autovacuum_work_mem

typ_pamięci_współdzielonej_dynamicznie

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczenie
Wartość domyślna posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja typ dynamicznej pamięci współdzielonej

mnożnik_pamięci_hashowania (hash_mem_multiplier)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wiele work_mem do użycia w przypadku tabel skrótów.
Typ danych numeryczne
Wartość domyślna 1
Dozwolone wartości 1-1000
Typ parametru dynamic
Dokumentacja hash_mem_multiplier

duże strony

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne.
Typ danych wyliczenie
Wartość domyślna try
Dozwolone wartości on,off,try
Typ parametru statyczny
Dokumentacja huge_pages

Description

Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.

Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:

  • Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
  • Skracają czas potrzebny do zarządzania pamięcią.

W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.

Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.

Rekomendacje

  • W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
  • Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj huge_pages ustawienie na TRY potrzeby bezproblemowego przejścia i optymalnej wydajności.

Uwagi specyficzne dla platformy Azure

W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.

wielki_rozmiar_strony

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Rozmiar ogromnej strony, która powinna być żądana.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja huge_page_size

logical_decoding_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego.
Typ danych liczba całkowita
Wartość domyślna 65536
Dozwolone wartości 64-2147483647
Typ parametru dynamic
Dokumentacja logical_decoding_work_mem

pamięć_prac_utrzymaniowych

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 1024-2097151
Typ parametru dynamic
Dokumentacja maintenance_work_mem

Description

maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.

![UWAGA] Ustawienie maintenance_work_mem na zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie maintenance_work_mem wartości, należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci.
  • Separacja pamięci dla autovacuum: możesz użyć ustawienia autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiór maintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.

Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci pamięć_prac_utrzymaniowych
2 GiB 99 328 KiB
4 GiB 157 696 KiB
8 GiB 216 064 KiB
16 GiB 274,432 KiB
32 GiB 332 800 KiB
48 GiB 367,616 KiB
64 GiB 392 192 KiB
80 GiB 410 624 KiB
128 GiB 450 560 KiB
160 GiB 468 992 KiB
192 GiB 484 352 KiB
256 GiB 508 928 KiB
384 GiB 542,720 KiB
432 GiB 552 960 KiB
672 GiB 590 848 KiB

maksymalna_liczba_przygotowanych_transakcji

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0-262143
Typ parametru statyczny
Dokumentacja max_prepared_transactions

max_stack_depth

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych liczba całkowita
Wartość domyślna 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

min_dynamic_shared_memory

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja min_dynamic_shared_memory

shared_buffers (pamięć współdzielona)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru statyczny
Dokumentacja shared_buffers

Description

Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.

Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.

W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.

W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci shared_buffers (pamięć współdzielona)
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

typ_pamięci_współdzielonej

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej.
Typ danych wyliczenie
Wartość domyślna mmap
Dozwolone wartości mmap
Typ parametru tylko do odczytu
Dokumentacja typ_pamięci_współdzielonej

pam_tymczasowe (temp_buffers)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamic
Dokumentacja temp_buffers

work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego.
Typ danych liczba całkowita
Wartość domyślna 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamic
Dokumentacja work_mem

Description

Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.

W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.

Kwestie kluczowe

  • Pamięć połączenia prywatnego: work_mem jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używa shared_buffers.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają work_mem. Proste zapytania, takie jak SELECT 1, raczej nie będą wymagać work_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementu work_mem.
  • Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu work_mem.

Monitorowanie i dostosowywanie work_mem

Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:

  • Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia work_mem.
  • Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie

Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:

  • Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie work_mem wartości dla tego użytkownika. ALTER ROLE Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.

  • Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie work_mem wartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj polecenia ALTER FUNCTION lub ALTER PROCEDURE.

  • Poziom bazy danych: zmień work_mem na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.

  • Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie work_mem wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonej work_mem wartości.

Określanie minimalnej wartości work_mem dla operacji sortowania

Aby znaleźć minimalną work_mem wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:

  1. Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
  2. Ustaw wartość początkową work_mem nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak: SET work_mem TO '25MB'.
  3. Uruchom EXPLAIN ANALYZE na problematycznym zapytaniu w tej samej sesji.
  4. Przejrzyj dane wyjściowe dla elementu "Sort Method: quicksort Memory: xkB". Jeśli wskazuje "external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, aż work_mem zostanie wyświetlone. Pojawienie się "quicksort Memory" sygnału wskazuje, że zapytanie działa teraz w pamięci.
  5. Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.

autovacuum_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych liczba całkowita
Wartość domyślna -1
Dozwolone wartości -1-2097151
Typ parametru dynamic
Dokumentacja autovacuum_work_mem

typ_pamięci_współdzielonej_dynamicznie

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczenie
Wartość domyślna posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja typ dynamicznej pamięci współdzielonej

mnożnik_pamięci_hashowania (hash_mem_multiplier)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wiele work_mem do użycia w przypadku tabel skrótów.
Typ danych numeryczne
Wartość domyślna 1
Dozwolone wartości 1-1000
Typ parametru dynamic
Dokumentacja hash_mem_multiplier

duże strony

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne.
Typ danych wyliczenie
Wartość domyślna try
Dozwolone wartości on,off,try
Typ parametru statyczny
Dokumentacja huge_pages

Description

Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.

Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:

  • Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
  • Skracają czas potrzebny do zarządzania pamięcią.

W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.

Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.

Rekomendacje

  • W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
  • Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj huge_pages ustawienie na TRY potrzeby bezproblemowego przejścia i optymalnej wydajności.

Uwagi specyficzne dla platformy Azure

W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.

logical_decoding_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego.
Typ danych liczba całkowita
Wartość domyślna 65536
Dozwolone wartości 64-2147483647
Typ parametru dynamic
Dokumentacja logical_decoding_work_mem

pamięć_prac_utrzymaniowych

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 1024-2097151
Typ parametru dynamic
Dokumentacja maintenance_work_mem

Description

maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.

![UWAGA] Ustawienie maintenance_work_mem na zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie maintenance_work_mem wartości, należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci.
  • Separacja pamięci dla autovacuum: możesz użyć ustawienia autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiór maintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.

Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci pamięć_prac_utrzymaniowych
2 GiB 99 328 KiB
4 GiB 157 696 KiB
8 GiB 216 064 KiB
16 GiB 274,432 KiB
32 GiB 332 800 KiB
48 GiB 367,616 KiB
64 GiB 392 192 KiB
80 GiB 410 624 KiB
128 GiB 450 560 KiB
160 GiB 468 992 KiB
192 GiB 484 352 KiB
256 GiB 508 928 KiB
384 GiB 542,720 KiB
432 GiB 552 960 KiB
672 GiB 590 848 KiB

maksymalna_liczba_przygotowanych_transakcji

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0-262143
Typ parametru statyczny
Dokumentacja max_prepared_transactions

max_stack_depth

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych liczba całkowita
Wartość domyślna 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

shared_buffers (pamięć współdzielona)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru statyczny
Dokumentacja shared_buffers

Description

Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.

Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.

W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.

W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci shared_buffers (pamięć współdzielona)
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

typ_pamięci_współdzielonej

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej.
Typ danych wyliczenie
Wartość domyślna mmap
Dozwolone wartości mmap
Typ parametru tylko do odczytu
Dokumentacja typ_pamięci_współdzielonej

pam_tymczasowe (temp_buffers)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamic
Dokumentacja temp_buffers

work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego.
Typ danych liczba całkowita
Wartość domyślna 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamic
Dokumentacja work_mem

Description

Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.

W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.

Kwestie kluczowe

  • Pamięć połączenia prywatnego: work_mem jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używa shared_buffers.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają work_mem. Proste zapytania, takie jak SELECT 1, raczej nie będą wymagać work_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementu work_mem.
  • Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu work_mem.

Monitorowanie i dostosowywanie work_mem

Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:

  • Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia work_mem.
  • Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie

Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:

  • Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie work_mem wartości dla tego użytkownika. ALTER ROLE Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.

  • Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie work_mem wartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj polecenia ALTER FUNCTION lub ALTER PROCEDURE.

  • Poziom bazy danych: zmień work_mem na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.

  • Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie work_mem wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonej work_mem wartości.

Określanie minimalnej wartości work_mem dla operacji sortowania

Aby znaleźć minimalną work_mem wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:

  1. Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
  2. Ustaw wartość początkową work_mem nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak: SET work_mem TO '25MB'.
  3. Uruchom EXPLAIN ANALYZE na problematycznym zapytaniu w tej samej sesji.
  4. Przejrzyj dane wyjściowe dla elementu "Sort Method: quicksort Memory: xkB". Jeśli wskazuje "external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, aż work_mem zostanie wyświetlone. Pojawienie się "quicksort Memory" sygnału wskazuje, że zapytanie działa teraz w pamięci.
  5. Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.

autovacuum_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych liczba całkowita
Wartość domyślna -1
Dozwolone wartości -1-2097151
Typ parametru dynamic
Dokumentacja autovacuum_work_mem

typ_pamięci_współdzielonej_dynamicznie

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczenie
Wartość domyślna posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja typ dynamicznej pamięci współdzielonej

mnożnik_pamięci_hashowania (hash_mem_multiplier)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wiele work_mem do użycia w przypadku tabel skrótów.
Typ danych numeryczne
Wartość domyślna 1
Dozwolone wartości 1-1000
Typ parametru dynamic
Dokumentacja hash_mem_multiplier

duże strony

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne.
Typ danych wyliczenie
Wartość domyślna try
Dozwolone wartości on,off,try
Typ parametru statyczny
Dokumentacja huge_pages

Description

Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.

Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:

  • Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
  • Skracają czas potrzebny do zarządzania pamięcią.

W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.

Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.

Rekomendacje

  • W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
  • Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj huge_pages ustawienie na TRY potrzeby bezproblemowego przejścia i optymalnej wydajności.

Uwagi specyficzne dla platformy Azure

W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.

pamięć_prac_utrzymaniowych

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 1024-2097151
Typ parametru dynamic
Dokumentacja maintenance_work_mem

Description

maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.

![UWAGA] Ustawienie maintenance_work_mem na zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie maintenance_work_mem wartości, należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci.
  • Separacja pamięci dla autovacuum: możesz użyć ustawienia autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiór maintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.

Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci pamięć_prac_utrzymaniowych
2 GiB 99 328 KiB
4 GiB 157 696 KiB
8 GiB 216 064 KiB
16 GiB 274,432 KiB
32 GiB 332 800 KiB
48 GiB 367,616 KiB
64 GiB 392 192 KiB
80 GiB 410 624 KiB
128 GiB 450 560 KiB
160 GiB 468 992 KiB
192 GiB 484 352 KiB
256 GiB 508 928 KiB
384 GiB 542,720 KiB
432 GiB 552 960 KiB
672 GiB 590 848 KiB

maksymalna_liczba_przygotowanych_transakcji

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0-262143
Typ parametru statyczny
Dokumentacja max_prepared_transactions

max_stack_depth

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych liczba całkowita
Wartość domyślna 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

shared_buffers (pamięć współdzielona)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru statyczny
Dokumentacja shared_buffers

Description

Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.

Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.

W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.

W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci shared_buffers (pamięć współdzielona)
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

typ_pamięci_współdzielonej

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej.
Typ danych wyliczenie
Wartość domyślna mmap
Dozwolone wartości mmap
Typ parametru tylko do odczytu
Dokumentacja typ_pamięci_współdzielonej

pam_tymczasowe (temp_buffers)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamic
Dokumentacja temp_buffers

work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego.
Typ danych liczba całkowita
Wartość domyślna 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamic
Dokumentacja work_mem

Description

Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.

W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.

Kwestie kluczowe

  • Pamięć połączenia prywatnego: work_mem jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używa shared_buffers.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają work_mem. Proste zapytania, takie jak SELECT 1, raczej nie będą wymagać work_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementu work_mem.
  • Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu work_mem.

Monitorowanie i dostosowywanie work_mem

Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:

  • Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia work_mem.
  • Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie

Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:

  • Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie work_mem wartości dla tego użytkownika. ALTER ROLE Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.

  • Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie work_mem wartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj polecenia ALTER FUNCTION lub ALTER PROCEDURE.

  • Poziom bazy danych: zmień work_mem na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.

  • Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie work_mem wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonej work_mem wartości.

Określanie minimalnej wartości work_mem dla operacji sortowania

Aby znaleźć minimalną work_mem wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:

  1. Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
  2. Ustaw wartość początkową work_mem nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak: SET work_mem TO '25MB'.
  3. Uruchom EXPLAIN ANALYZE na problematycznym zapytaniu w tej samej sesji.
  4. Przejrzyj dane wyjściowe dla elementu "Sort Method: quicksort Memory: xkB". Jeśli wskazuje "external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, aż work_mem zostanie wyświetlone. Pojawienie się "quicksort Memory" sygnału wskazuje, że zapytanie działa teraz w pamięci.
  5. Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.

autovacuum_work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych liczba całkowita
Wartość domyślna -1
Dozwolone wartości -1-2097151
Typ parametru dynamic
Dokumentacja autovacuum_work_mem

typ_pamięci_współdzielonej_dynamicznie

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczenie
Wartość domyślna posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja typ dynamicznej pamięci współdzielonej

duże strony

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne.
Typ danych wyliczenie
Wartość domyślna try
Dozwolone wartości on,off,try
Typ parametru statyczny
Dokumentacja huge_pages

Description

Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.

Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:

  • Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
  • Skracają czas potrzebny do zarządzania pamięcią.

W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.

Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.

Rekomendacje

  • W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
  • Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj huge_pages ustawienie na TRY potrzeby bezproblemowego przejścia i optymalnej wydajności.

Uwagi specyficzne dla platformy Azure

W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.

pamięć_prac_utrzymaniowych

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 1024-2097151
Typ parametru dynamic
Dokumentacja maintenance_work_mem

Description

maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.

![UWAGA] Ustawienie maintenance_work_mem na zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie maintenance_work_mem wartości, należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci.
  • Separacja pamięci dla autovacuum: możesz użyć ustawienia autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiór maintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.

Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci pamięć_prac_utrzymaniowych
2 GiB 99 328 KiB
4 GiB 157 696 KiB
8 GiB 216 064 KiB
16 GiB 274,432 KiB
32 GiB 332 800 KiB
48 GiB 367,616 KiB
64 GiB 392 192 KiB
80 GiB 410 624 KiB
128 GiB 450 560 KiB
160 GiB 468 992 KiB
192 GiB 484 352 KiB
256 GiB 508 928 KiB
384 GiB 542,720 KiB
432 GiB 552 960 KiB
672 GiB 590 848 KiB

maksymalna_liczba_przygotowanych_transakcji

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym.
Typ danych liczba całkowita
Wartość domyślna 0
Dozwolone wartości 0-262143
Typ parametru statyczny
Dokumentacja max_prepared_transactions

max_stack_depth

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych liczba całkowita
Wartość domyślna 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

shared_buffers (pamięć współdzielona)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci.
Typ danych liczba całkowita
Wartość domyślna Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru statyczny
Dokumentacja shared_buffers

Description

Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.

Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.

Uwagi specyficzne dla platformy Azure

Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.

Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.

W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.

W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.

Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:

Rozmiar pamięci shared_buffers (pamięć współdzielona)
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

pam_tymczasowe (temp_buffers)

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych.
Typ danych liczba całkowita
Wartość domyślna 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamic
Dokumentacja temp_buffers

work_mem

Attribute Wartość
Kategoria Użycie zasobów/pamięć
Description Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego.
Typ danych liczba całkowita
Wartość domyślna 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamic
Dokumentacja work_mem

Description

Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.

W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.

Kwestie kluczowe

  • Pamięć połączenia prywatnego: work_mem jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używa shared_buffers.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają work_mem. Proste zapytania, takie jak SELECT 1, raczej nie będą wymagać work_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementu work_mem.
  • Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu work_mem.

Monitorowanie i dostosowywanie work_mem

Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:

  • Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia work_mem.
  • Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie

Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:

  • Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie work_mem wartości dla tego użytkownika. ALTER ROLE Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.

  • Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie work_mem wartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj polecenia ALTER FUNCTION lub ALTER PROCEDURE.

  • Poziom bazy danych: zmień work_mem na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.

  • Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie work_mem wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonej work_mem wartości.

Określanie minimalnej wartości work_mem dla operacji sortowania

Aby znaleźć minimalną work_mem wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:

  1. Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
  2. Ustaw wartość początkową work_mem nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak: SET work_mem TO '25MB'.
  3. Uruchom EXPLAIN ANALYZE na problematycznym zapytaniu w tej samej sesji.
  4. Przejrzyj dane wyjściowe dla elementu "Sort Method: quicksort Memory: xkB". Jeśli wskazuje "external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, aż work_mem zostanie wyświetlone. Pojawienie się "quicksort Memory" sygnału wskazuje, że zapytanie działa teraz w pamięci.
  5. Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.