Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
autovacuum_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
| Typ danych | liczba całkowita |
| Wartość domyślna | -1 |
| Dozwolone wartości | -1-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | autovacuum_work_mem |
commit_timestamp_buffers
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanej puli używanej dla pamięci podręcznej sygnatury czasowej zatwierdzenia. Określ wartość 0, aby ta wartość została określona jako ułamek shared_buffers. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 0-131072 |
| Typ parametru | statyczny |
| Dokumentacja | commit_timestamp_buffers |
typ_pamięci_współdzielonej_dynamicznie
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
| Typ danych | wyliczenie |
| Wartość domyślna | posix |
| Dozwolone wartości | posix |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ dynamicznej pamięci współdzielonej |
mnożnik_pamięci_hashowania (hash_mem_multiplier)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wielokrotność "work_mem" do użycia w tabelach skrótów. |
| Typ danych | numeryczne |
| Wartość domyślna | 2 |
| Dozwolone wartości | 1-1000 |
| Typ parametru | dynamic |
| Dokumentacja | hash_mem_multiplier |
duże strony
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Korzystanie z ogromnych stron w systemie Linux lub Windows. |
| Typ danych | wyliczenie |
| Wartość domyślna | try |
| Dozwolone wartości | on,off,try |
| Typ parametru | statyczny |
| Dokumentacja | huge_pages |
Description
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Rekomendacje
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pagesustawienie naTRYpotrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.
wielki_rozmiar_strony
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Rozmiar ogromnej strony, która powinna być żądana. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | huge_page_size |
io_combine_limit
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ogranicz rozmiar odczytów i zapisów danych. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 16 |
| Dozwolone wartości | 1-128 |
| Typ parametru | dynamic |
| Dokumentacja | io_combine_limit |
io_max_combine_limit
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Globalny limit serwera, który ogranicza io_combine_limit. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 16 |
| Dozwolone wartości | 1-128 |
| Typ parametru | dynamic |
| Dokumentacja | io_max_combine_limit |
maksymalna współbieżność IO
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Maksymalna liczba operacji I/O, które jeden proces może wykonać jednocześnie. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 64 |
| Dozwolone wartości | -1-1024 |
| Typ parametru | statyczny |
| Dokumentacja | io_max_concurrency |
metoda_IO
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera metodę wykonywania asynchronicznych operacji we/wy. |
| Typ danych | wyliczenie |
| Wartość domyślna | worker |
| Dozwolone wartości | worker,sync |
| Typ parametru | statyczny |
| Dokumentacja | io_method |
io_workers
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Liczba procesów roboczych I/O dla io_method=worker. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 3 |
| Dozwolone wartości | 1-32 |
| Typ parametru | dynamic |
| Dokumentacja | io_workers |
logical_decoding_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego. Ta ilość pamięci może być używana przez każdy wewnętrzny bufor zmiany kolejki, zanim zostanie przelana na dysk. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 65536 |
| Dozwolone wartości | 64-2147483647 |
| Typ parametru | dynamic |
| Dokumentacja | logical_decoding_work_mem |
pamięć_prac_utrzymaniowych
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną ilość pamięci do użycia na potrzeby operacji konserwacji. Obejmuje to operacje, takie jak VACUUM i CREATE INDEX. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 1024-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | maintenance_work_mem |
Description
maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.
![UWAGA] Ustawienie
maintenance_work_memna zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.
Kwestie kluczowe
-
Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie
maintenance_work_memwartości, należy pamiętać, żeVACUUMma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci. -
Separacja pamięci dla autovacuum: możesz użyć ustawienia
autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiórmaintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | pamięć_prac_utrzymaniowych |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274,432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367,616 KiB |
| 64 GiB | 392 192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508 928 KiB |
| 384 GiB | 542,720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
maksymalna_liczba_przygotowanych_transakcji
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0-262143 |
| Typ parametru | statyczny |
| Dokumentacja | max_prepared_transactions |
max_stack_depth
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną głębokość stosu w kilobajtach. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 2048 |
| Dozwolone wartości | 2048 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | min_dynamic_shared_memory |
bufory_członków_multixact
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanego bufora pamięci używanego dla pamięci podręcznej członków MultiXact. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 32 |
| Dozwolone wartości | 16-131072 |
| Typ parametru | statyczny |
| Dokumentacja | multixact_member_buffers |
multixact_offset_buffers
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanej puli buforowej używanej do pamięci podręcznej przesunięcia MultiXact. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 16 |
| Dozwolone wartości | 16-131072 |
| Typ parametru | statyczny |
| Dokumentacja | multixact_offset_buffers |
notify_buffers
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanej puli używanej dla pamięci podręcznej komunikatów LISTEN/NOTIFY. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 16 |
| Dozwolone wartości | 16-131072 |
| Typ parametru | statyczny |
| Dokumentacja | notify_buffers |
bufory do serializacji
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanej buforowej puli używanej dla pamięci podręcznej transakcji o poziomie serializowalnym. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 32 |
| Dozwolone wartości | 16-131072 |
| Typ parametru | statyczny |
| Dokumentacja | serializable_buffers |
shared_buffers (pamięć współdzielona)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia liczbę pamięci udostępnionej używanych przez serwer. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 16-1073741823 |
| Typ parametru | statyczny |
| Dokumentacja | shared_buffers |
Description
Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | shared_buffers (pamięć współdzielona) |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
typ_pamięci_współdzielonej
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej. |
| Typ danych | wyliczenie |
| Wartość domyślna | mmap |
| Dozwolone wartości | mmap |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ_pamięci_współdzielonej |
subtransaction_buffers
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanej puli buforów stosowanej do pamięci podręcznej podtransakcji. Określ wartość 0, aby ta wartość została określona jako ułamek shared_buffers. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 0-131072 |
| Typ parametru | statyczny |
| Dokumentacja | subtransaction_buffers |
pam_tymczasowe (temp_buffers)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę tymczasowych buforów używanych przez każdą sesję. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 100-1073741823 |
| Typ parametru | dynamic |
| Dokumentacja | temp_buffers |
bufory_transakcji
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanej puli buforowej, używanej do pamięci podręcznej stanu transakcji. Określ wartość 0, aby ta wartość została określona jako ułamek shared_buffers. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 0-131072 |
| Typ parametru | statyczny |
| Dokumentacja | bufory_transakcji |
vacuum_buffer_usage_limit
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar puli dla funkcji VACUUM, ANALYZE i autovacuum. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 2048 |
| Dozwolone wartości | 0-16777216 |
| Typ parametru | dynamic |
| Dokumentacja | vacuum_buffer_usage_limit |
work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną ilość pamięci do użycia w obszarach roboczych zapytań. Taka ilość pamięci może być używana przez każdą operację wewnętrznego sortowania i tablicę skrótów zanim nastąpi przełączenie się na tymczasowe pliki dyskowe. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 4096 |
| Dozwolone wartości | 4096-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | work_mem |
Description
Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
-
Pamięć połączenia prywatnego:
work_memjest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używashared_buffers. -
Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają
work_mem. Proste zapytania, takie jakSELECT 1, raczej nie będą wymagaćwork_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementuwork_mem. -
Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu
work_mem.
Monitorowanie i dostosowywanie work_mem
Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:
-
Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia
work_mem. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_memwartości dla tego użytkownika.ALTER ROLEUż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_memwartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj poleceniaALTER FUNCTIONlubALTER PROCEDURE.Poziom bazy danych: zmień
work_memna 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_memwartoś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ększonejwork_memwartoś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:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_memnieco 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'. - Uruchom
EXPLAIN ANALYZEna problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB". Jeśli wskazuje"external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, ażwork_memzostanie wyświetlone. Pojawienie się"quicksort Memory"sygnału wskazuje, że zapytanie działa teraz w pamięci. - Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.
autovacuum_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
| Typ danych | liczba całkowita |
| Wartość domyślna | -1 |
| Dozwolone wartości | -1-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | autovacuum_work_mem |
commit_timestamp_buffers
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanej puli używanej dla pamięci podręcznej sygnatury czasowej zatwierdzenia. Określ wartość 0, aby ta wartość została określona jako ułamek shared_buffers. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 0-131072 |
| Typ parametru | statyczny |
| Dokumentacja | commit_timestamp_buffers |
typ_pamięci_współdzielonej_dynamicznie
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
| Typ danych | wyliczenie |
| Wartość domyślna | posix |
| Dozwolone wartości | posix |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ dynamicznej pamięci współdzielonej |
mnożnik_pamięci_hashowania (hash_mem_multiplier)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wielokrotność "work_mem" do użycia w tabelach skrótów. |
| Typ danych | numeryczne |
| Wartość domyślna | 2 |
| Dozwolone wartości | 1-1000 |
| Typ parametru | dynamic |
| Dokumentacja | hash_mem_multiplier |
duże strony
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Korzystanie z ogromnych stron w systemie Linux lub Windows. |
| Typ danych | wyliczenie |
| Wartość domyślna | try |
| Dozwolone wartości | on,off,try |
| Typ parametru | statyczny |
| Dokumentacja | huge_pages |
Description
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Rekomendacje
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pagesustawienie naTRYpotrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.
wielki_rozmiar_strony
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Rozmiar ogromnej strony, która powinna być żądana. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | huge_page_size |
io_combine_limit
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ogranicz rozmiar odczytów i zapisów danych. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 16 |
| Dozwolone wartości | 16 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | io_combine_limit |
logical_decoding_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego. Ta ilość pamięci może być używana przez każdy wewnętrzny bufor zmiany kolejki, zanim zostanie przelana na dysk. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 65536 |
| Dozwolone wartości | 64-2147483647 |
| Typ parametru | dynamic |
| Dokumentacja | logical_decoding_work_mem |
pamięć_prac_utrzymaniowych
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną ilość pamięci do użycia na potrzeby operacji konserwacji. Obejmuje to operacje, takie jak VACUUM i CREATE INDEX. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 1024-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | maintenance_work_mem |
Description
maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.
![UWAGA] Ustawienie
maintenance_work_memna zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.
Kwestie kluczowe
-
Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie
maintenance_work_memwartości, należy pamiętać, żeVACUUMma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci. -
Separacja pamięci dla autovacuum: możesz użyć ustawienia
autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiórmaintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | pamięć_prac_utrzymaniowych |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274,432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367,616 KiB |
| 64 GiB | 392 192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508 928 KiB |
| 384 GiB | 542,720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
maksymalna_liczba_przygotowanych_transakcji
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0-262143 |
| Typ parametru | statyczny |
| Dokumentacja | max_prepared_transactions |
max_stack_depth
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną głębokość stosu w kilobajtach. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 2048 |
| Dozwolone wartości | 2048 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | min_dynamic_shared_memory |
bufory_członków_multixact
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanego bufora pamięci używanego dla pamięci podręcznej członków MultiXact. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 32 |
| Dozwolone wartości | 16-131072 |
| Typ parametru | statyczny |
| Dokumentacja | multixact_member_buffers |
multixact_offset_buffers
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanej puli buforowej używanej do pamięci podręcznej przesunięcia MultiXact. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 16 |
| Dozwolone wartości | 16-131072 |
| Typ parametru | statyczny |
| Dokumentacja | multixact_offset_buffers |
notify_buffers
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanej puli używanej dla pamięci podręcznej komunikatów LISTEN/NOTIFY. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 16 |
| Dozwolone wartości | 16-131072 |
| Typ parametru | statyczny |
| Dokumentacja | notify_buffers |
bufory do serializacji
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanej buforowej puli używanej dla pamięci podręcznej transakcji o poziomie serializowalnym. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 32 |
| Dozwolone wartości | 16-131072 |
| Typ parametru | statyczny |
| Dokumentacja | serializable_buffers |
shared_buffers (pamięć współdzielona)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia liczbę pamięci udostępnionej używanych przez serwer. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 16-1073741823 |
| Typ parametru | statyczny |
| Dokumentacja | shared_buffers |
Description
Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | shared_buffers (pamięć współdzielona) |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
typ_pamięci_współdzielonej
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej. |
| Typ danych | wyliczenie |
| Wartość domyślna | mmap |
| Dozwolone wartości | mmap |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ_pamięci_współdzielonej |
subtransaction_buffers
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanej puli buforów stosowanej do pamięci podręcznej podtransakcji. Określ wartość 0, aby ta wartość została określona jako ułamek shared_buffers. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 0-131072 |
| Typ parametru | statyczny |
| Dokumentacja | subtransaction_buffers |
pam_tymczasowe (temp_buffers)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę tymczasowych buforów używanych przez każdą sesję. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 100-1073741823 |
| Typ parametru | dynamic |
| Dokumentacja | temp_buffers |
bufory_transakcji
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar dedykowanej puli buforowej, używanej do pamięci podręcznej stanu transakcji. Określ wartość 0, aby ta wartość została określona jako ułamek shared_buffers. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 0-131072 |
| Typ parametru | statyczny |
| Dokumentacja | bufory_transakcji |
vacuum_buffer_usage_limit
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar puli dla funkcji VACUUM, ANALYZE i autovacuum. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 2048 |
| Dozwolone wartości | 0-16777216 |
| Typ parametru | dynamic |
| Dokumentacja | vacuum_buffer_usage_limit |
work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną ilość pamięci do użycia w obszarach roboczych zapytań. Taka ilość pamięci może być używana przez każdą operację wewnętrznego sortowania i tablicę skrótów zanim nastąpi przełączenie się na tymczasowe pliki dyskowe. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 4096 |
| Dozwolone wartości | 4096-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | work_mem |
Description
Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
-
Pamięć połączenia prywatnego:
work_memjest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używashared_buffers. -
Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają
work_mem. Proste zapytania, takie jakSELECT 1, raczej nie będą wymagaćwork_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementuwork_mem. -
Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu
work_mem.
Monitorowanie i dostosowywanie work_mem
Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:
-
Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia
work_mem. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_memwartości dla tego użytkownika.ALTER ROLEUż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_memwartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj poleceniaALTER FUNCTIONlubALTER PROCEDURE.Poziom bazy danych: zmień
work_memna 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_memwartoś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ększonejwork_memwartoś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:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_memnieco 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'. - Uruchom
EXPLAIN ANALYZEna problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB". Jeśli wskazuje"external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, ażwork_memzostanie wyświetlone. Pojawienie się"quicksort Memory"sygnału wskazuje, że zapytanie działa teraz w pamięci. - Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.
autovacuum_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
| Typ danych | liczba całkowita |
| Wartość domyślna | -1 |
| Dozwolone wartości | -1-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | autovacuum_work_mem |
typ_pamięci_współdzielonej_dynamicznie
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
| Typ danych | wyliczenie |
| Wartość domyślna | posix |
| Dozwolone wartości | posix |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ dynamicznej pamięci współdzielonej |
mnożnik_pamięci_hashowania (hash_mem_multiplier)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wiele work_mem do użycia w przypadku tabel skrótów. |
| Typ danych | numeryczne |
| Wartość domyślna | 2 |
| Dozwolone wartości | 1-1000 |
| Typ parametru | dynamic |
| Dokumentacja | hash_mem_multiplier |
duże strony
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne. |
| Typ danych | wyliczenie |
| Wartość domyślna | try |
| Dozwolone wartości | on,off,try |
| Typ parametru | statyczny |
| Dokumentacja | huge_pages |
Description
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Rekomendacje
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pagesustawienie naTRYpotrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.
wielki_rozmiar_strony
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Rozmiar ogromnej strony, która powinna być żądana. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | huge_page_size |
logical_decoding_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 65536 |
| Dozwolone wartości | 64-2147483647 |
| Typ parametru | dynamic |
| Dokumentacja | logical_decoding_work_mem |
pamięć_prac_utrzymaniowych
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 1024-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | maintenance_work_mem |
Description
maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.
![UWAGA] Ustawienie
maintenance_work_memna zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.
Kwestie kluczowe
-
Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie
maintenance_work_memwartości, należy pamiętać, żeVACUUMma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci. -
Separacja pamięci dla autovacuum: możesz użyć ustawienia
autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiórmaintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | pamięć_prac_utrzymaniowych |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274,432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367,616 KiB |
| 64 GiB | 392 192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508 928 KiB |
| 384 GiB | 542,720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
maksymalna_liczba_przygotowanych_transakcji
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0-262143 |
| Typ parametru | statyczny |
| Dokumentacja | max_prepared_transactions |
max_stack_depth
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną głębokość stosu w kilobajtach. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 2048 |
| Dozwolone wartości | 2048 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | min_dynamic_shared_memory |
shared_buffers (pamięć współdzielona)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 16-1073741823 |
| Typ parametru | statyczny |
| Dokumentacja | shared_buffers |
Description
Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | shared_buffers (pamięć współdzielona) |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
typ_pamięci_współdzielonej
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej. |
| Typ danych | wyliczenie |
| Wartość domyślna | mmap |
| Dozwolone wartości | mmap |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ_pamięci_współdzielonej |
pam_tymczasowe (temp_buffers)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 100-1073741823 |
| Typ parametru | dynamic |
| Dokumentacja | temp_buffers |
vacuum_buffer_usage_limit
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia rozmiar puli dla funkcji VACUUM, ANALYZE i autovacuum. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 256 |
| Dozwolone wartości | 0-16777216 |
| Typ parametru | dynamic |
| Dokumentacja | vacuum_buffer_usage_limit |
work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 4096 |
| Dozwolone wartości | 4096-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | work_mem |
Description
Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
-
Pamięć połączenia prywatnego:
work_memjest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używashared_buffers. -
Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają
work_mem. Proste zapytania, takie jakSELECT 1, raczej nie będą wymagaćwork_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementuwork_mem. -
Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu
work_mem.
Monitorowanie i dostosowywanie work_mem
Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:
-
Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia
work_mem. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_memwartości dla tego użytkownika.ALTER ROLEUż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_memwartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj poleceniaALTER FUNCTIONlubALTER PROCEDURE.Poziom bazy danych: zmień
work_memna 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_memwartoś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ększonejwork_memwartoś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:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_memnieco 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'. - Uruchom
EXPLAIN ANALYZEna problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB". Jeśli wskazuje"external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, ażwork_memzostanie wyświetlone. Pojawienie się"quicksort Memory"sygnału wskazuje, że zapytanie działa teraz w pamięci. - Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.
autovacuum_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
| Typ danych | liczba całkowita |
| Wartość domyślna | -1 |
| Dozwolone wartości | -1-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | autovacuum_work_mem |
typ_pamięci_współdzielonej_dynamicznie
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
| Typ danych | wyliczenie |
| Wartość domyślna | posix |
| Dozwolone wartości | posix |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ dynamicznej pamięci współdzielonej |
mnożnik_pamięci_hashowania (hash_mem_multiplier)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wiele work_mem do użycia w przypadku tabel skrótów. |
| Typ danych | numeryczne |
| Wartość domyślna | 2 |
| Dozwolone wartości | 1-1000 |
| Typ parametru | dynamic |
| Dokumentacja | hash_mem_multiplier |
duże strony
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne. |
| Typ danych | wyliczenie |
| Wartość domyślna | try |
| Dozwolone wartości | on,off,try |
| Typ parametru | statyczny |
| Dokumentacja | huge_pages |
Description
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Rekomendacje
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pagesustawienie naTRYpotrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.
wielki_rozmiar_strony
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Rozmiar ogromnej strony, która powinna być żądana. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | huge_page_size |
logical_decoding_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 65536 |
| Dozwolone wartości | 64-2147483647 |
| Typ parametru | dynamic |
| Dokumentacja | logical_decoding_work_mem |
pamięć_prac_utrzymaniowych
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 1024-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | maintenance_work_mem |
Description
maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.
![UWAGA] Ustawienie
maintenance_work_memna zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.
Kwestie kluczowe
-
Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie
maintenance_work_memwartości, należy pamiętać, żeVACUUMma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci. -
Separacja pamięci dla autovacuum: możesz użyć ustawienia
autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiórmaintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | pamięć_prac_utrzymaniowych |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274,432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367,616 KiB |
| 64 GiB | 392 192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508 928 KiB |
| 384 GiB | 542,720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
maksymalna_liczba_przygotowanych_transakcji
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0-262143 |
| Typ parametru | statyczny |
| Dokumentacja | max_prepared_transactions |
max_stack_depth
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną głębokość stosu w kilobajtach. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 2048 |
| Dozwolone wartości | 2048 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | min_dynamic_shared_memory |
shared_buffers (pamięć współdzielona)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 16-1073741823 |
| Typ parametru | statyczny |
| Dokumentacja | shared_buffers |
Description
Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | shared_buffers (pamięć współdzielona) |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
typ_pamięci_współdzielonej
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej. |
| Typ danych | wyliczenie |
| Wartość domyślna | mmap |
| Dozwolone wartości | mmap |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ_pamięci_współdzielonej |
pam_tymczasowe (temp_buffers)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 100-1073741823 |
| Typ parametru | dynamic |
| Dokumentacja | temp_buffers |
work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 4096 |
| Dozwolone wartości | 4096-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | work_mem |
Description
Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
-
Pamięć połączenia prywatnego:
work_memjest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używashared_buffers. -
Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają
work_mem. Proste zapytania, takie jakSELECT 1, raczej nie będą wymagaćwork_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementuwork_mem. -
Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu
work_mem.
Monitorowanie i dostosowywanie work_mem
Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:
-
Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia
work_mem. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_memwartości dla tego użytkownika.ALTER ROLEUż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_memwartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj poleceniaALTER FUNCTIONlubALTER PROCEDURE.Poziom bazy danych: zmień
work_memna 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_memwartoś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ększonejwork_memwartoś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:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_memnieco 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'. - Uruchom
EXPLAIN ANALYZEna problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB". Jeśli wskazuje"external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, ażwork_memzostanie wyświetlone. Pojawienie się"quicksort Memory"sygnału wskazuje, że zapytanie działa teraz w pamięci. - Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.
autovacuum_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
| Typ danych | liczba całkowita |
| Wartość domyślna | -1 |
| Dozwolone wartości | -1-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | autovacuum_work_mem |
typ_pamięci_współdzielonej_dynamicznie
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
| Typ danych | wyliczenie |
| Wartość domyślna | posix |
| Dozwolone wartości | posix |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ dynamicznej pamięci współdzielonej |
mnożnik_pamięci_hashowania (hash_mem_multiplier)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wiele work_mem do użycia w przypadku tabel skrótów. |
| Typ danych | numeryczne |
| Wartość domyślna | 1 |
| Dozwolone wartości | 1-1000 |
| Typ parametru | dynamic |
| Dokumentacja | hash_mem_multiplier |
duże strony
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne. |
| Typ danych | wyliczenie |
| Wartość domyślna | try |
| Dozwolone wartości | on,off,try |
| Typ parametru | statyczny |
| Dokumentacja | huge_pages |
Description
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Rekomendacje
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pagesustawienie naTRYpotrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.
wielki_rozmiar_strony
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Rozmiar ogromnej strony, która powinna być żądana. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | huge_page_size |
logical_decoding_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 65536 |
| Dozwolone wartości | 64-2147483647 |
| Typ parametru | dynamic |
| Dokumentacja | logical_decoding_work_mem |
pamięć_prac_utrzymaniowych
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 1024-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | maintenance_work_mem |
Description
maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.
![UWAGA] Ustawienie
maintenance_work_memna zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.
Kwestie kluczowe
-
Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie
maintenance_work_memwartości, należy pamiętać, żeVACUUMma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci. -
Separacja pamięci dla autovacuum: możesz użyć ustawienia
autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiórmaintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | pamięć_prac_utrzymaniowych |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274,432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367,616 KiB |
| 64 GiB | 392 192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508 928 KiB |
| 384 GiB | 542,720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
maksymalna_liczba_przygotowanych_transakcji
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0-262143 |
| Typ parametru | statyczny |
| Dokumentacja | max_prepared_transactions |
max_stack_depth
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną głębokość stosu w kilobajtach. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 2048 |
| Dozwolone wartości | 2048 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | min_dynamic_shared_memory |
shared_buffers (pamięć współdzielona)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 16-1073741823 |
| Typ parametru | statyczny |
| Dokumentacja | shared_buffers |
Description
Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | shared_buffers (pamięć współdzielona) |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
typ_pamięci_współdzielonej
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej. |
| Typ danych | wyliczenie |
| Wartość domyślna | mmap |
| Dozwolone wartości | mmap |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ_pamięci_współdzielonej |
pam_tymczasowe (temp_buffers)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 100-1073741823 |
| Typ parametru | dynamic |
| Dokumentacja | temp_buffers |
work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 4096 |
| Dozwolone wartości | 4096-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | work_mem |
Description
Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
-
Pamięć połączenia prywatnego:
work_memjest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używashared_buffers. -
Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają
work_mem. Proste zapytania, takie jakSELECT 1, raczej nie będą wymagaćwork_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementuwork_mem. -
Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu
work_mem.
Monitorowanie i dostosowywanie work_mem
Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:
-
Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia
work_mem. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_memwartości dla tego użytkownika.ALTER ROLEUż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_memwartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj poleceniaALTER FUNCTIONlubALTER PROCEDURE.Poziom bazy danych: zmień
work_memna 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_memwartoś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ększonejwork_memwartoś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:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_memnieco 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'. - Uruchom
EXPLAIN ANALYZEna problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB". Jeśli wskazuje"external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, ażwork_memzostanie wyświetlone. Pojawienie się"quicksort Memory"sygnału wskazuje, że zapytanie działa teraz w pamięci. - Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.
autovacuum_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
| Typ danych | liczba całkowita |
| Wartość domyślna | -1 |
| Dozwolone wartości | -1-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | autovacuum_work_mem |
typ_pamięci_współdzielonej_dynamicznie
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
| Typ danych | wyliczenie |
| Wartość domyślna | posix |
| Dozwolone wartości | posix |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ dynamicznej pamięci współdzielonej |
mnożnik_pamięci_hashowania (hash_mem_multiplier)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wiele work_mem do użycia w przypadku tabel skrótów. |
| Typ danych | numeryczne |
| Wartość domyślna | 1 |
| Dozwolone wartości | 1-1000 |
| Typ parametru | dynamic |
| Dokumentacja | hash_mem_multiplier |
duże strony
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne. |
| Typ danych | wyliczenie |
| Wartość domyślna | try |
| Dozwolone wartości | on,off,try |
| Typ parametru | statyczny |
| Dokumentacja | huge_pages |
Description
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Rekomendacje
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pagesustawienie naTRYpotrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.
logical_decoding_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 65536 |
| Dozwolone wartości | 64-2147483647 |
| Typ parametru | dynamic |
| Dokumentacja | logical_decoding_work_mem |
pamięć_prac_utrzymaniowych
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 1024-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | maintenance_work_mem |
Description
maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.
![UWAGA] Ustawienie
maintenance_work_memna zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.
Kwestie kluczowe
-
Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie
maintenance_work_memwartości, należy pamiętać, żeVACUUMma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci. -
Separacja pamięci dla autovacuum: możesz użyć ustawienia
autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiórmaintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | pamięć_prac_utrzymaniowych |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274,432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367,616 KiB |
| 64 GiB | 392 192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508 928 KiB |
| 384 GiB | 542,720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
maksymalna_liczba_przygotowanych_transakcji
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0-262143 |
| Typ parametru | statyczny |
| Dokumentacja | max_prepared_transactions |
max_stack_depth
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną głębokość stosu w kilobajtach. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 2048 |
| Dozwolone wartości | 2048 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | max_stack_depth |
shared_buffers (pamięć współdzielona)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 16-1073741823 |
| Typ parametru | statyczny |
| Dokumentacja | shared_buffers |
Description
Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | shared_buffers (pamięć współdzielona) |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
typ_pamięci_współdzielonej
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej. |
| Typ danych | wyliczenie |
| Wartość domyślna | mmap |
| Dozwolone wartości | mmap |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ_pamięci_współdzielonej |
pam_tymczasowe (temp_buffers)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 100-1073741823 |
| Typ parametru | dynamic |
| Dokumentacja | temp_buffers |
work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 4096 |
| Dozwolone wartości | 4096-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | work_mem |
Description
Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
-
Pamięć połączenia prywatnego:
work_memjest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używashared_buffers. -
Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają
work_mem. Proste zapytania, takie jakSELECT 1, raczej nie będą wymagaćwork_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementuwork_mem. -
Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu
work_mem.
Monitorowanie i dostosowywanie work_mem
Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:
-
Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia
work_mem. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_memwartości dla tego użytkownika.ALTER ROLEUż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_memwartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj poleceniaALTER FUNCTIONlubALTER PROCEDURE.Poziom bazy danych: zmień
work_memna 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_memwartoś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ększonejwork_memwartoś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:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_memnieco 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'. - Uruchom
EXPLAIN ANALYZEna problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB". Jeśli wskazuje"external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, ażwork_memzostanie wyświetlone. Pojawienie się"quicksort Memory"sygnału wskazuje, że zapytanie działa teraz w pamięci. - Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.
autovacuum_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
| Typ danych | liczba całkowita |
| Wartość domyślna | -1 |
| Dozwolone wartości | -1-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | autovacuum_work_mem |
typ_pamięci_współdzielonej_dynamicznie
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
| Typ danych | wyliczenie |
| Wartość domyślna | posix |
| Dozwolone wartości | posix |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ dynamicznej pamięci współdzielonej |
mnożnik_pamięci_hashowania (hash_mem_multiplier)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wiele work_mem do użycia w przypadku tabel skrótów. |
| Typ danych | numeryczne |
| Wartość domyślna | 1 |
| Dozwolone wartości | 1-1000 |
| Typ parametru | dynamic |
| Dokumentacja | hash_mem_multiplier |
duże strony
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne. |
| Typ danych | wyliczenie |
| Wartość domyślna | try |
| Dozwolone wartości | on,off,try |
| Typ parametru | statyczny |
| Dokumentacja | huge_pages |
Description
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Rekomendacje
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pagesustawienie naTRYpotrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.
pamięć_prac_utrzymaniowych
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 1024-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | maintenance_work_mem |
Description
maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.
![UWAGA] Ustawienie
maintenance_work_memna zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.
Kwestie kluczowe
-
Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie
maintenance_work_memwartości, należy pamiętać, żeVACUUMma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci. -
Separacja pamięci dla autovacuum: możesz użyć ustawienia
autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiórmaintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | pamięć_prac_utrzymaniowych |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274,432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367,616 KiB |
| 64 GiB | 392 192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508 928 KiB |
| 384 GiB | 542,720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
maksymalna_liczba_przygotowanych_transakcji
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0-262143 |
| Typ parametru | statyczny |
| Dokumentacja | max_prepared_transactions |
max_stack_depth
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną głębokość stosu w kilobajtach. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 2048 |
| Dozwolone wartości | 2048 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | max_stack_depth |
shared_buffers (pamięć współdzielona)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 16-1073741823 |
| Typ parametru | statyczny |
| Dokumentacja | shared_buffers |
Description
Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | shared_buffers (pamięć współdzielona) |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
typ_pamięci_współdzielonej
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej. |
| Typ danych | wyliczenie |
| Wartość domyślna | mmap |
| Dozwolone wartości | mmap |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ_pamięci_współdzielonej |
pam_tymczasowe (temp_buffers)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 100-1073741823 |
| Typ parametru | dynamic |
| Dokumentacja | temp_buffers |
work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 4096 |
| Dozwolone wartości | 4096-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | work_mem |
Description
Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
-
Pamięć połączenia prywatnego:
work_memjest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używashared_buffers. -
Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają
work_mem. Proste zapytania, takie jakSELECT 1, raczej nie będą wymagaćwork_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementuwork_mem. -
Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu
work_mem.
Monitorowanie i dostosowywanie work_mem
Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:
-
Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia
work_mem. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_memwartości dla tego użytkownika.ALTER ROLEUż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_memwartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj poleceniaALTER FUNCTIONlubALTER PROCEDURE.Poziom bazy danych: zmień
work_memna 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_memwartoś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ększonejwork_memwartoś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:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_memnieco 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'. - Uruchom
EXPLAIN ANALYZEna problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB". Jeśli wskazuje"external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, ażwork_memzostanie wyświetlone. Pojawienie się"quicksort Memory"sygnału wskazuje, że zapytanie działa teraz w pamięci. - Po określeniu wartości za pomocą tej metody można ją zastosować globalnie lub na bardziej szczegółowych poziomach (zgodnie z wcześniejszym opisem) zgodnie z potrzebami operacyjnymi.
autovacuum_work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
| Typ danych | liczba całkowita |
| Wartość domyślna | -1 |
| Dozwolone wartości | -1-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | autovacuum_work_mem |
typ_pamięci_współdzielonej_dynamicznie
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
| Typ danych | wyliczenie |
| Wartość domyślna | posix |
| Dozwolone wartości | posix |
| Typ parametru | tylko do odczytu |
| Dokumentacja | typ dynamicznej pamięci współdzielonej |
duże strony
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne. |
| Typ danych | wyliczenie |
| Wartość domyślna | try |
| Dozwolone wartości | on,off,try |
| Typ parametru | statyczny |
| Dokumentacja | huge_pages |
Description
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba błędów w pamięci tłumaczeń (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci współdzielonej jest przydzielana dla współdzielonych buforów.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Rekomendacje
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pagesustawienie naTRYpotrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z czterema lub więcej vCores, duże strony są automatycznie przydzielane z podstawowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers.
pamięć_prac_utrzymaniowych
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 1024-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | maintenance_work_mem |
Description
maintenance_work_mem to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM, CREATE INDEXi ALTER TABLE. W przeciwieństwie do work_mem, która ma wpływ na alokację pamięci dla operacji zapytaniowych, maintenance_work_mem jest zarezerwowany dla zadań, które utrzymują i optymalizują strukturę bazy danych.
![UWAGA] Ustawienie
maintenance_work_memna zbyt agresywne wartości może okresowo powodować błąd 'brak pamięci' w systemie. Bardzo ważne jest, aby zrozumieć ilość pamięci dostępnej na serwerze oraz liczbę współbieżnych operacji, które mogłyby przydzielić pamięć dla opisanych wcześniej zadań przed wprowadzeniem zmian w tym parametrze.
Kwestie kluczowe
-
Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotek przez zwiększenie
maintenance_work_memwartości, należy pamiętać, żeVACUUMma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie można używać tylko do 1 GB pamięci. -
Separacja pamięci dla autovacuum: możesz użyć ustawienia
autovacuum_work_mem, aby niezależnie kontrolować pamięć używaną przez operacje autovacuum. To ustawienie działa jako podzbiórmaintenance_work_mem. Możesz zdecydować, ile pamięci używa automatyczne czyszczenie, bez wpływu na przydzielanie pamięci dla innych zadań konserwacyjnych i operacji dotyczących definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem to (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | pamięć_prac_utrzymaniowych |
|---|---|
| 2 GiB | 99 328 KiB |
| 4 GiB | 157 696 KiB |
| 8 GiB | 216 064 KiB |
| 16 GiB | 274,432 KiB |
| 32 GiB | 332 800 KiB |
| 48 GiB | 367,616 KiB |
| 64 GiB | 392 192 KiB |
| 80 GiB | 410 624 KiB |
| 128 GiB | 450 560 KiB |
| 160 GiB | 468 992 KiB |
| 192 GiB | 484 352 KiB |
| 256 GiB | 508 928 KiB |
| 384 GiB | 542,720 KiB |
| 432 GiB | 552 960 KiB |
| 672 GiB | 590 848 KiB |
maksymalna_liczba_przygotowanych_transakcji
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 0 |
| Dozwolone wartości | 0-262143 |
| Typ parametru | statyczny |
| Dokumentacja | max_prepared_transactions |
max_stack_depth
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną głębokość stosu w kilobajtach. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 2048 |
| Dozwolone wartości | 2048 |
| Typ parametru | tylko do odczytu |
| Dokumentacja | max_stack_depth |
shared_buffers (pamięć współdzielona)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci. |
| Typ danych | liczba całkowita |
| Wartość domyślna | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
| Dozwolone wartości | 16-1073741823 |
| Typ parametru | statyczny |
| Dokumentacja | shared_buffers |
Description
Parametr shared_buffers konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione bufory służą jako pośrednik między procesami bazy danych a dyskiem, skutecznie zmniejszając liczbę wymaganych operacji I/O.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers to memoryGib * 16384.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers to memoryGib * 32768.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
| Rozmiar pamięci | shared_buffers (pamięć współdzielona) |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
pam_tymczasowe (temp_buffers)
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 1024 |
| Dozwolone wartości | 100-1073741823 |
| Typ parametru | dynamic |
| Dokumentacja | temp_buffers |
work_mem
| Attribute | Wartość |
|---|---|
| Kategoria | Użycie zasobów/pamięć |
| Description | Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego. |
| Typ danych | liczba całkowita |
| Wartość domyślna | 4096 |
| Dozwolone wartości | 4096-2097151 |
| Typ parametru | dynamic |
| Dokumentacja | work_mem |
Description
Parametr work_mem w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do buforów udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem jest przydzielany w prywatnej przestrzeni pamięci na sesję lub na zapytanie. Ustawiając odpowiedni work_mem rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
-
Pamięć połączenia prywatnego:
work_memjest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć jest inna niż obszar pamięci udostępnionej, który używashared_buffers. -
Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają
work_mem. Proste zapytania, takie jakSELECT 1, raczej nie będą wymagaćwork_mem. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów elementuwork_mem. -
Operacje równoległe: w przypadku zapytań obejmujących wiele równoległych zapleczy każde zaplecze może potencjalnie używać jednego lub wielu fragmentów elementu
work_mem.
Monitorowanie i dostosowywanie work_mem
Ważne jest, aby stale monitorować wydajność systemu i dostosowywać work_mem je odpowiednio do potrzeb, przede wszystkim wtedy, gdy czasy wykonywania zapytań związane z sortowaniem lub operacjami tworzenia skrótów są powolne. Poniżej przedstawiono sposoby monitorowania wydajności przy użyciu narzędzi dostępnych w witrynie Azure Portal:
-
Szczegółowe informacje o wydajności zapytań: sprawdź kartę Najważniejsze zapytania według plików tymczasowych , aby zidentyfikować zapytania generujące pliki tymczasowe. Taka sytuacja wskazuje na prawdopodobną konieczność zwiększenia
work_mem. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem , często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_memwartości dla tego użytkownika.ALTER ROLEUż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_memwartości na poziomie określonej funkcji lub procedury może być korzystne. Aby przydzielić więcej pamięci do tych operacji, użyj poleceniaALTER FUNCTIONlubALTER PROCEDURE.Poziom bazy danych: zmień
work_memna 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_memwartoś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ększonejwork_memwartoś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:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_memnieco 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'. - Uruchom
EXPLAIN ANALYZEna problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB". Jeśli wskazuje"external merge Disk: xkB", zwiększ wartość stopniowo i ponownie przetestuj, ażwork_memzostanie wyświetlone. Pojawienie się"quicksort Memory"sygnału wskazuje, że zapytanie działa teraz w pamięci. - 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.