Udostępnij za pośrednictwem


Użycie zasobów/pamięć

autovacuum_work_mem

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych integer
Domyślna wartość -1
Dozwolone wartości -1-2097151
Typ parametru dynamiczna
Dokumentacja autovacuum_work_mem

dynamic_shared_memory_type

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczanie
Domyślna wartość posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja dynamic_shared_memory_type

hash_mem_multiplier

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

huge_pages

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 wyliczanie
Domyślna wartość try
Dozwolone wartości on,off,try
Typ parametru static
Dokumentacja huge_pages

opis

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 pominiętych wyszukiwania tłumaczenia (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 udostępnionej jest przydzielana dla udostępnionych.

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

Zalecenia

  • 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 co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego 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.

huge_page_size

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Rozmiar ogromnej strony, która powinna być żądana.
Typ danych integer
Domyślna wartość 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja huge_page_size

logical_decoding_work_mem

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego.
Typ danych integer
Domyślna wartość 65536
Dozwolone wartości 65536
Typ parametru tylko do odczytu
Dokumentacja logical_decoding_work_mem

maintenance_work_mem

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

opis

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_memmetody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie maintenance_work_memwartości , należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci.
  • Separacja pamięci dla automatycznego czyszczenia: możesz użyć autovacuum_work_mem ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji 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 maintenance_work_mem
2 GiB 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 0
Dozwolone wartości 0-262143
Typ parametru static
Dokumentacja max_prepared_transactions

max_stack_depth

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych integer
Domyślna wartość 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

min_dynamic_shared_memory

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania.
Typ danych integer
Domyślna wartość 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja min_dynamic_shared_memory

shared_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru static
Dokumentacja shared_buffers

opis

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 służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.

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
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

shared_memory_type

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej.
Typ danych wyliczanie
Domyślna wartość mmap
Dozwolone wartości mmap
Typ parametru tylko do odczytu
Dokumentacja shared_memory_type

temp_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych.
Typ danych integer
Domyślna wartość 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamiczna
Dokumentacja temp_buffers

vacuum_buffer_usage_limit

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia rozmiar puli dla funkcji VACUUM, ANALYZE i autovacuum.
Typ danych integer
Domyślna wartość 2048
Dozwolone wartości 0-16777216
Typ parametru dynamiczna
Dokumentacja vacuum_buffer_usage_limit

work_mem

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamiczna
Dokumentacja work_mem

opis

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

W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielane w przestrzeni pamięci prywatnej 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ęć różni się od używanego obszaru shared_buffers pamięci udostępnionej.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia work_mem. Proste zapytania, takie jak SELECT 1 , są mało prawdopodobne, aby 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 sugeruje potencjalną potrzebę 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. ALTER FUNCTION Użyj polecenia lubALTER PROCEDURE, aby w szczególności przydzielić więcej pamięci do tych operacji.

  • 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"wartość , zwiększ wartość przyrostowo i ponownie przetestuj work_mem , dopóki "quicksort Memory" nie zostanie wyświetlona. Wygląd sygnałów "quicksort Memory" , ż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

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych integer
Domyślna wartość -1
Dozwolone wartości -1-2097151
Typ parametru dynamiczna
Dokumentacja autovacuum_work_mem

dynamic_shared_memory_type

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczanie
Domyślna wartość posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja dynamic_shared_memory_type

hash_mem_multiplier

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

huge_pages

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 wyliczanie
Domyślna wartość try
Dozwolone wartości on,off,try
Typ parametru static
Dokumentacja huge_pages

opis

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 pominiętych wyszukiwania tłumaczenia (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 udostępnionej jest przydzielana dla udostępnionych.

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

Zalecenia

  • 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 co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego 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.

huge_page_size

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Rozmiar ogromnej strony, która powinna być żądana.
Typ danych integer
Domyślna wartość 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja huge_page_size

logical_decoding_work_mem

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego.
Typ danych integer
Domyślna wartość 65536
Dozwolone wartości 64-2147483647
Typ parametru dynamiczna
Dokumentacja logical_decoding_work_mem

maintenance_work_mem

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

opis

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_memmetody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie maintenance_work_memwartości , należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci.
  • Separacja pamięci dla automatycznego czyszczenia: możesz użyć autovacuum_work_mem ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji 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 maintenance_work_mem
2 GiB 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 0
Dozwolone wartości 0-262143
Typ parametru static
Dokumentacja max_prepared_transactions

max_stack_depth

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych integer
Domyślna wartość 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

min_dynamic_shared_memory

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania.
Typ danych integer
Domyślna wartość 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja min_dynamic_shared_memory

shared_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru static
Dokumentacja shared_buffers

opis

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 służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.

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
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

shared_memory_type

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej.
Typ danych wyliczanie
Domyślna wartość mmap
Dozwolone wartości mmap
Typ parametru tylko do odczytu
Dokumentacja shared_memory_type

temp_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych.
Typ danych integer
Domyślna wartość 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamiczna
Dokumentacja temp_buffers

vacuum_buffer_usage_limit

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia rozmiar puli dla funkcji VACUUM, ANALYZE i autovacuum.
Typ danych integer
Domyślna wartość 256
Dozwolone wartości 0-16777216
Typ parametru dynamiczna
Dokumentacja vacuum_buffer_usage_limit

work_mem

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamiczna
Dokumentacja work_mem

opis

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

W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielane w przestrzeni pamięci prywatnej 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ęć różni się od używanego obszaru shared_buffers pamięci udostępnionej.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia work_mem. Proste zapytania, takie jak SELECT 1 , są mało prawdopodobne, aby 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 sugeruje potencjalną potrzebę 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. ALTER FUNCTION Użyj polecenia lubALTER PROCEDURE, aby w szczególności przydzielić więcej pamięci do tych operacji.

  • 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"wartość , zwiększ wartość przyrostowo i ponownie przetestuj work_mem , dopóki "quicksort Memory" nie zostanie wyświetlona. Wygląd sygnałów "quicksort Memory" , ż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

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych integer
Domyślna wartość -1
Dozwolone wartości -1-2097151
Typ parametru dynamiczna
Dokumentacja autovacuum_work_mem

dynamic_shared_memory_type

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczanie
Domyślna wartość posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja dynamic_shared_memory_type

hash_mem_multiplier

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

huge_pages

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 wyliczanie
Domyślna wartość try
Dozwolone wartości on,off,try
Typ parametru static
Dokumentacja huge_pages

opis

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 pominiętych wyszukiwania tłumaczenia (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 udostępnionej jest przydzielana dla udostępnionych.

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

Zalecenia

  • 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 co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego 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.

huge_page_size

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Rozmiar ogromnej strony, która powinna być żądana.
Typ danych integer
Domyślna wartość 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja huge_page_size

logical_decoding_work_mem

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego.
Typ danych integer
Domyślna wartość 65536
Dozwolone wartości 64-2147483647
Typ parametru dynamiczna
Dokumentacja logical_decoding_work_mem

maintenance_work_mem

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

opis

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_memmetody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie maintenance_work_memwartości , należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci.
  • Separacja pamięci dla automatycznego czyszczenia: możesz użyć autovacuum_work_mem ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji 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 maintenance_work_mem
2 GiB 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 0
Dozwolone wartości 0-262143
Typ parametru static
Dokumentacja max_prepared_transactions

max_stack_depth

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych integer
Domyślna wartość 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

min_dynamic_shared_memory

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania.
Typ danych integer
Domyślna wartość 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja min_dynamic_shared_memory

shared_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru static
Dokumentacja shared_buffers

opis

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 służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.

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
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

shared_memory_type

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej.
Typ danych wyliczanie
Domyślna wartość mmap
Dozwolone wartości mmap
Typ parametru tylko do odczytu
Dokumentacja shared_memory_type

temp_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych.
Typ danych integer
Domyślna wartość 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamiczna
Dokumentacja temp_buffers

work_mem

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamiczna
Dokumentacja work_mem

opis

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

W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielane w przestrzeni pamięci prywatnej 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ęć różni się od używanego obszaru shared_buffers pamięci udostępnionej.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia work_mem. Proste zapytania, takie jak SELECT 1 , są mało prawdopodobne, aby 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 sugeruje potencjalną potrzebę 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. ALTER FUNCTION Użyj polecenia lubALTER PROCEDURE, aby w szczególności przydzielić więcej pamięci do tych operacji.

  • 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"wartość , zwiększ wartość przyrostowo i ponownie przetestuj work_mem , dopóki "quicksort Memory" nie zostanie wyświetlona. Wygląd sygnałów "quicksort Memory" , ż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

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych integer
Domyślna wartość -1
Dozwolone wartości -1-2097151
Typ parametru dynamiczna
Dokumentacja autovacuum_work_mem

dynamic_shared_memory_type

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczanie
Domyślna wartość posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja dynamic_shared_memory_type

hash_mem_multiplier

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

huge_pages

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 wyliczanie
Domyślna wartość try
Dozwolone wartości on,off,try
Typ parametru static
Dokumentacja huge_pages

opis

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 pominiętych wyszukiwania tłumaczenia (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 udostępnionej jest przydzielana dla udostępnionych.

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

Zalecenia

  • 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 co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego 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.

huge_page_size

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Rozmiar ogromnej strony, która powinna być żądana.
Typ danych integer
Domyślna wartość 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja huge_page_size

logical_decoding_work_mem

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego.
Typ danych integer
Domyślna wartość 65536
Dozwolone wartości 64-2147483647
Typ parametru dynamiczna
Dokumentacja logical_decoding_work_mem

maintenance_work_mem

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

opis

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_memmetody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie maintenance_work_memwartości , należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci.
  • Separacja pamięci dla automatycznego czyszczenia: możesz użyć autovacuum_work_mem ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji 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 maintenance_work_mem
2 GiB 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 0
Dozwolone wartości 0-262143
Typ parametru static
Dokumentacja max_prepared_transactions

max_stack_depth

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych integer
Domyślna wartość 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

min_dynamic_shared_memory

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania.
Typ danych integer
Domyślna wartość 0
Dozwolone wartości 0
Typ parametru tylko do odczytu
Dokumentacja min_dynamic_shared_memory

shared_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru static
Dokumentacja shared_buffers

opis

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 służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.

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
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

shared_memory_type

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej.
Typ danych wyliczanie
Domyślna wartość mmap
Dozwolone wartości mmap
Typ parametru tylko do odczytu
Dokumentacja shared_memory_type

temp_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych.
Typ danych integer
Domyślna wartość 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamiczna
Dokumentacja temp_buffers

work_mem

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamiczna
Dokumentacja work_mem

opis

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

W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielane w przestrzeni pamięci prywatnej 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ęć różni się od używanego obszaru shared_buffers pamięci udostępnionej.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia work_mem. Proste zapytania, takie jak SELECT 1 , są mało prawdopodobne, aby 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 sugeruje potencjalną potrzebę 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. ALTER FUNCTION Użyj polecenia lubALTER PROCEDURE, aby w szczególności przydzielić więcej pamięci do tych operacji.

  • 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"wartość , zwiększ wartość przyrostowo i ponownie przetestuj work_mem , dopóki "quicksort Memory" nie zostanie wyświetlona. Wygląd sygnałów "quicksort Memory" , ż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

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych integer
Domyślna wartość -1
Dozwolone wartości -1-2097151
Typ parametru dynamiczna
Dokumentacja autovacuum_work_mem

dynamic_shared_memory_type

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczanie
Domyślna wartość posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja dynamic_shared_memory_type

hash_mem_multiplier

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

huge_pages

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 wyliczanie
Domyślna wartość try
Dozwolone wartości on,off,try
Typ parametru static
Dokumentacja huge_pages

opis

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 pominiętych wyszukiwania tłumaczenia (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 udostępnionej jest przydzielana dla udostępnionych.

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

Zalecenia

  • 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 co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego 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

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego.
Typ danych integer
Domyślna wartość 65536
Dozwolone wartości 64-2147483647
Typ parametru dynamiczna
Dokumentacja logical_decoding_work_mem

maintenance_work_mem

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

opis

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_memmetody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie maintenance_work_memwartości , należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci.
  • Separacja pamięci dla automatycznego czyszczenia: możesz użyć autovacuum_work_mem ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji 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 maintenance_work_mem
2 GiB 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 0
Dozwolone wartości 0-262143
Typ parametru static
Dokumentacja max_prepared_transactions

max_stack_depth

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych integer
Domyślna wartość 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

shared_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru static
Dokumentacja shared_buffers

opis

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 służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.

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
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

shared_memory_type

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej.
Typ danych wyliczanie
Domyślna wartość mmap
Dozwolone wartości mmap
Typ parametru tylko do odczytu
Dokumentacja shared_memory_type

temp_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych.
Typ danych integer
Domyślna wartość 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamiczna
Dokumentacja temp_buffers

work_mem

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamiczna
Dokumentacja work_mem

opis

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

W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielane w przestrzeni pamięci prywatnej 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ęć różni się od używanego obszaru shared_buffers pamięci udostępnionej.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia work_mem. Proste zapytania, takie jak SELECT 1 , są mało prawdopodobne, aby 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 sugeruje potencjalną potrzebę 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. ALTER FUNCTION Użyj polecenia lubALTER PROCEDURE, aby w szczególności przydzielić więcej pamięci do tych operacji.

  • 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"wartość , zwiększ wartość przyrostowo i ponownie przetestuj work_mem , dopóki "quicksort Memory" nie zostanie wyświetlona. Wygląd sygnałów "quicksort Memory" , ż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

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych integer
Domyślna wartość -1
Dozwolone wartości -1-2097151
Typ parametru dynamiczna
Dokumentacja autovacuum_work_mem

dynamic_shared_memory_type

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczanie
Domyślna wartość posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja dynamic_shared_memory_type

hash_mem_multiplier

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

huge_pages

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 wyliczanie
Domyślna wartość try
Dozwolone wartości on,off,try
Typ parametru static
Dokumentacja huge_pages

opis

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 pominiętych wyszukiwania tłumaczenia (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 udostępnionej jest przydzielana dla udostępnionych.

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

Zalecenia

  • 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 co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego 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.

maintenance_work_mem

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

opis

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_memmetody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie maintenance_work_memwartości , należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci.
  • Separacja pamięci dla automatycznego czyszczenia: możesz użyć autovacuum_work_mem ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji 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 maintenance_work_mem
2 GiB 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 0
Dozwolone wartości 0-262143
Typ parametru static
Dokumentacja max_prepared_transactions

max_stack_depth

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych integer
Domyślna wartość 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

shared_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru static
Dokumentacja shared_buffers

opis

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 służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.

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
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

shared_memory_type

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej.
Typ danych wyliczanie
Domyślna wartość mmap
Dozwolone wartości mmap
Typ parametru tylko do odczytu
Dokumentacja shared_memory_type

temp_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych.
Typ danych integer
Domyślna wartość 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamiczna
Dokumentacja temp_buffers

work_mem

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamiczna
Dokumentacja work_mem

opis

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

W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielane w przestrzeni pamięci prywatnej 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ęć różni się od używanego obszaru shared_buffers pamięci udostępnionej.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia work_mem. Proste zapytania, takie jak SELECT 1 , są mało prawdopodobne, aby 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 sugeruje potencjalną potrzebę 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. ALTER FUNCTION Użyj polecenia lubALTER PROCEDURE, aby w szczególności przydzielić więcej pamięci do tych operacji.

  • 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"wartość , zwiększ wartość przyrostowo i ponownie przetestuj work_mem , dopóki "quicksort Memory" nie zostanie wyświetlona. Wygląd sygnałów "quicksort Memory" , ż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

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia.
Typ danych integer
Domyślna wartość -1
Dozwolone wartości -1-2097151
Typ parametru dynamiczna
Dokumentacja autovacuum_work_mem

dynamic_shared_memory_type

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Wybiera użytą implementację pamięci udostępnionej dynamicznej.
Typ danych wyliczanie
Domyślna wartość posix
Dozwolone wartości posix
Typ parametru tylko do odczytu
Dokumentacja dynamic_shared_memory_type

huge_pages

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 wyliczanie
Domyślna wartość try
Dozwolone wartości on,off,try
Typ parametru static
Dokumentacja huge_pages

opis

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 pominiętych wyszukiwania tłumaczenia (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 udostępnionej jest przydzielana dla udostępnionych.

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

Zalecenia

  • 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 co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego 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.

maintenance_work_mem

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

opis

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_memmetody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.

Kwestie kluczowe

  • Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie maintenance_work_memwartości , należy pamiętać, że VACUUM ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci.
  • Separacja pamięci dla automatycznego czyszczenia: możesz użyć autovacuum_work_mem ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji 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 maintenance_work_mem
2 GiB 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 0
Dozwolone wartości 0-262143
Typ parametru static
Dokumentacja max_prepared_transactions

max_stack_depth

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną głębokość stosu w kilobajtach.
Typ danych integer
Domyślna wartość 2048
Dozwolone wartości 2048
Typ parametru tylko do odczytu
Dokumentacja max_stack_depth

shared_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera.
Dozwolone wartości 16-1073741823
Typ parametru static
Dokumentacja shared_buffers

opis

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 służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.

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
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

temp_buffers

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych.
Typ danych integer
Domyślna wartość 1024
Dozwolone wartości 100-1073741823
Typ parametru dynamiczna
Dokumentacja temp_buffers

work_mem

Atrybut Wartość
Kategoria Użycie zasobów/pamięć
opis 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 integer
Domyślna wartość 4096
Dozwolone wartości 4096-2097151
Typ parametru dynamiczna
Dokumentacja work_mem

opis

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

W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielane w przestrzeni pamięci prywatnej 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ęć różni się od używanego obszaru shared_buffers pamięci udostępnionej.
  • Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia work_mem. Proste zapytania, takie jak SELECT 1 , są mało prawdopodobne, aby 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 sugeruje potencjalną potrzebę 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. ALTER FUNCTION Użyj polecenia lubALTER PROCEDURE, aby w szczególności przydzielić więcej pamięci do tych operacji.

  • 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"wartość , zwiększ wartość przyrostowo i ponownie przetestuj work_mem , dopóki "quicksort Memory" nie zostanie wyświetlona. Wygląd sygnałów "quicksort Memory" , ż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.