Użycie zasobów/pamięć
autovacuum_work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
Typ danych | integer |
Domyślna wartość | -1 |
Dozwolone wartości | -1-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | autovacuum_work_mem |
dynamic_shared_memory_type
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
Typ danych | wyliczanie |
Domyślna wartość | posix |
Dozwolone wartości | posix |
Typ parametru | tylko do odczytu |
Dokumentacja | dynamic_shared_memory_type |
hash_mem_multiplier
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wiele work_mem do użycia w przypadku tabel skrótów. |
Typ danych | numeryczne |
Domyślna wartość | 2 |
Dozwolone wartości | 1-1000 |
Typ parametru | dynamiczna |
Dokumentacja | hash_mem_multiplier |
huge_pages
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne. |
Typ danych | wyliczanie |
Domyślna wartość | try |
Dozwolone wartości | on,off,try |
Typ parametru | static |
Dokumentacja | huge_pages |
opis
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba pominiętych wyszukiwania tłumaczenia (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci udostępnionej jest przydzielana dla udostępnionych.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Zalecenia
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pages
ustawienie naTRY
potrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers
.
huge_page_size
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Rozmiar ogromnej strony, która powinna być żądana. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0 |
Typ parametru | tylko do odczytu |
Dokumentacja | huge_page_size |
logical_decoding_work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego. |
Typ danych | integer |
Domyślna wartość | 65536 |
Dozwolone wartości | 65536 |
Typ parametru | tylko do odczytu |
Dokumentacja | logical_decoding_work_mem |
maintenance_work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 1024-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | maintenance_work_mem |
opis
maintenance_work_mem
to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM
, CREATE INDEX
i ALTER TABLE
. W przeciwieństwie do work_mem
metody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem
jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.
Kwestie kluczowe
- Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie
maintenance_work_mem
wartości , należy pamiętać, żeVACUUM
ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci. - Separacja pamięci dla automatycznego czyszczenia: możesz użyć
autovacuum_work_mem
ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem
Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem
domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem
zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem
to (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0-262143 |
Typ parametru | static |
Dokumentacja | max_prepared_transactions |
max_stack_depth
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną głębokość stosu w kilobajtach. |
Typ danych | integer |
Domyślna wartość | 2048 |
Dozwolone wartości | 2048 |
Typ parametru | tylko do odczytu |
Dokumentacja | max_stack_depth |
min_dynamic_shared_memory
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0 |
Typ parametru | tylko do odczytu |
Dokumentacja | min_dynamic_shared_memory |
shared_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 16-1073741823 |
Typ parametru | static |
Dokumentacja | shared_buffers |
opis
Parametr shared_buffers
konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers
serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers
zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers
to memoryGib * 16384
.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers
to memoryGib * 32768
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej. |
Typ danych | wyliczanie |
Domyślna wartość | mmap |
Dozwolone wartości | mmap |
Typ parametru | tylko do odczytu |
Dokumentacja | shared_memory_type |
temp_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych. |
Typ danych | integer |
Domyślna wartość | 1024 |
Dozwolone wartości | 100-1073741823 |
Typ parametru | dynamiczna |
Dokumentacja | temp_buffers |
vacuum_buffer_usage_limit
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia rozmiar puli dla funkcji VACUUM, ANALYZE i autovacuum. |
Typ danych | integer |
Domyślna wartość | 2048 |
Dozwolone wartości | 0-16777216 |
Typ parametru | dynamiczna |
Dokumentacja | vacuum_buffer_usage_limit |
work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego. |
Typ danych | integer |
Domyślna wartość | 4096 |
Dozwolone wartości | 4096-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | work_mem |
opis
Parametr work_mem
w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej sesji każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem
jest przydzielane w przestrzeni pamięci prywatnej na sesję lub na zapytanie. Ustawiając odpowiedni work_mem
rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
- Pamięć połączenia prywatnego:
work_mem
jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć różni się od używanego obszarushared_buffers
pamięci udostępnionej. - Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia
work_mem
. Proste zapytania, takie jakSELECT 1
, są mało prawdopodobne, aby wymagaćwork_mem
. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów 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 sugeruje potencjalną potrzebę zwiększenia
work_mem
. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem
, często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_mem
wartości dla tego użytkownika.ALTER ROLE
Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie
work_mem
wartości na poziomie określonej funkcji lub procedury może być korzystne.ALTER FUNCTION
Użyj polecenia lubALTER PROCEDURE
, aby w szczególności przydzielić więcej pamięci do tych operacji.Poziom bazy danych: zmień
work_mem
na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie
work_mem
wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonejwork_mem
wartości.
Określanie minimalnej wartości work_mem dla operacji sortowania
Aby znaleźć minimalną work_mem
wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_mem
nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak:SET work_mem TO '25MB'
. - Uruchom
EXPLAIN ANALYZE
na problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB"
. Jeśli wskazuje"external merge Disk: xkB"
wartość , zwiększ wartość przyrostowo i ponownie przetestujwork_mem
, dopóki"quicksort Memory"
nie zostanie wyświetlona. Wygląd sygnałów"quicksort Memory"
, ż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
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
Typ danych | integer |
Domyślna wartość | -1 |
Dozwolone wartości | -1-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | autovacuum_work_mem |
dynamic_shared_memory_type
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
Typ danych | wyliczanie |
Domyślna wartość | posix |
Dozwolone wartości | posix |
Typ parametru | tylko do odczytu |
Dokumentacja | dynamic_shared_memory_type |
hash_mem_multiplier
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wiele work_mem do użycia w przypadku tabel skrótów. |
Typ danych | numeryczne |
Domyślna wartość | 2 |
Dozwolone wartości | 1-1000 |
Typ parametru | dynamiczna |
Dokumentacja | hash_mem_multiplier |
huge_pages
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne. |
Typ danych | wyliczanie |
Domyślna wartość | try |
Dozwolone wartości | on,off,try |
Typ parametru | static |
Dokumentacja | huge_pages |
opis
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba pominiętych wyszukiwania tłumaczenia (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci udostępnionej jest przydzielana dla udostępnionych.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Zalecenia
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pages
ustawienie naTRY
potrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers
.
huge_page_size
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Rozmiar ogromnej strony, która powinna być żądana. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0 |
Typ parametru | tylko do odczytu |
Dokumentacja | huge_page_size |
logical_decoding_work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego. |
Typ danych | integer |
Domyślna wartość | 65536 |
Dozwolone wartości | 64-2147483647 |
Typ parametru | dynamiczna |
Dokumentacja | logical_decoding_work_mem |
maintenance_work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 1024-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | maintenance_work_mem |
opis
maintenance_work_mem
to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM
, CREATE INDEX
i ALTER TABLE
. W przeciwieństwie do work_mem
metody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem
jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.
Kwestie kluczowe
- Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie
maintenance_work_mem
wartości , należy pamiętać, żeVACUUM
ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci. - Separacja pamięci dla automatycznego czyszczenia: możesz użyć
autovacuum_work_mem
ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem
Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem
domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem
zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem
to (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0-262143 |
Typ parametru | static |
Dokumentacja | max_prepared_transactions |
max_stack_depth
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną głębokość stosu w kilobajtach. |
Typ danych | integer |
Domyślna wartość | 2048 |
Dozwolone wartości | 2048 |
Typ parametru | tylko do odczytu |
Dokumentacja | max_stack_depth |
min_dynamic_shared_memory
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0 |
Typ parametru | tylko do odczytu |
Dokumentacja | min_dynamic_shared_memory |
shared_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 16-1073741823 |
Typ parametru | static |
Dokumentacja | shared_buffers |
opis
Parametr shared_buffers
konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers
serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers
zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers
to memoryGib * 16384
.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers
to memoryGib * 32768
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej. |
Typ danych | wyliczanie |
Domyślna wartość | mmap |
Dozwolone wartości | mmap |
Typ parametru | tylko do odczytu |
Dokumentacja | shared_memory_type |
temp_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych. |
Typ danych | integer |
Domyślna wartość | 1024 |
Dozwolone wartości | 100-1073741823 |
Typ parametru | dynamiczna |
Dokumentacja | temp_buffers |
vacuum_buffer_usage_limit
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia rozmiar puli dla funkcji VACUUM, ANALYZE i autovacuum. |
Typ danych | integer |
Domyślna wartość | 256 |
Dozwolone wartości | 0-16777216 |
Typ parametru | dynamiczna |
Dokumentacja | vacuum_buffer_usage_limit |
work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego. |
Typ danych | integer |
Domyślna wartość | 4096 |
Dozwolone wartości | 4096-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | work_mem |
opis
Parametr work_mem
w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej sesji każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem
jest przydzielane w przestrzeni pamięci prywatnej na sesję lub na zapytanie. Ustawiając odpowiedni work_mem
rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
- Pamięć połączenia prywatnego:
work_mem
jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć różni się od używanego obszarushared_buffers
pamięci udostępnionej. - Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia
work_mem
. Proste zapytania, takie jakSELECT 1
, są mało prawdopodobne, aby wymagaćwork_mem
. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów 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 sugeruje potencjalną potrzebę zwiększenia
work_mem
. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem
, często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_mem
wartości dla tego użytkownika.ALTER ROLE
Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie
work_mem
wartości na poziomie określonej funkcji lub procedury może być korzystne.ALTER FUNCTION
Użyj polecenia lubALTER PROCEDURE
, aby w szczególności przydzielić więcej pamięci do tych operacji.Poziom bazy danych: zmień
work_mem
na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie
work_mem
wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonejwork_mem
wartości.
Określanie minimalnej wartości work_mem dla operacji sortowania
Aby znaleźć minimalną work_mem
wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_mem
nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak:SET work_mem TO '25MB'
. - Uruchom
EXPLAIN ANALYZE
na problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB"
. Jeśli wskazuje"external merge Disk: xkB"
wartość , zwiększ wartość przyrostowo i ponownie przetestujwork_mem
, dopóki"quicksort Memory"
nie zostanie wyświetlona. Wygląd sygnałów"quicksort Memory"
, ż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
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
Typ danych | integer |
Domyślna wartość | -1 |
Dozwolone wartości | -1-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | autovacuum_work_mem |
dynamic_shared_memory_type
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
Typ danych | wyliczanie |
Domyślna wartość | posix |
Dozwolone wartości | posix |
Typ parametru | tylko do odczytu |
Dokumentacja | dynamic_shared_memory_type |
hash_mem_multiplier
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wiele work_mem do użycia w przypadku tabel skrótów. |
Typ danych | numeryczne |
Domyślna wartość | 2 |
Dozwolone wartości | 1-1000 |
Typ parametru | dynamiczna |
Dokumentacja | hash_mem_multiplier |
huge_pages
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne. |
Typ danych | wyliczanie |
Domyślna wartość | try |
Dozwolone wartości | on,off,try |
Typ parametru | static |
Dokumentacja | huge_pages |
opis
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba pominiętych wyszukiwania tłumaczenia (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci udostępnionej jest przydzielana dla udostępnionych.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Zalecenia
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pages
ustawienie naTRY
potrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers
.
huge_page_size
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Rozmiar ogromnej strony, która powinna być żądana. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0 |
Typ parametru | tylko do odczytu |
Dokumentacja | huge_page_size |
logical_decoding_work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego. |
Typ danych | integer |
Domyślna wartość | 65536 |
Dozwolone wartości | 64-2147483647 |
Typ parametru | dynamiczna |
Dokumentacja | logical_decoding_work_mem |
maintenance_work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 1024-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | maintenance_work_mem |
opis
maintenance_work_mem
to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM
, CREATE INDEX
i ALTER TABLE
. W przeciwieństwie do work_mem
metody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem
jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.
Kwestie kluczowe
- Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie
maintenance_work_mem
wartości , należy pamiętać, żeVACUUM
ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci. - Separacja pamięci dla automatycznego czyszczenia: możesz użyć
autovacuum_work_mem
ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem
Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem
domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem
zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem
to (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0-262143 |
Typ parametru | static |
Dokumentacja | max_prepared_transactions |
max_stack_depth
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną głębokość stosu w kilobajtach. |
Typ danych | integer |
Domyślna wartość | 2048 |
Dozwolone wartości | 2048 |
Typ parametru | tylko do odczytu |
Dokumentacja | max_stack_depth |
min_dynamic_shared_memory
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0 |
Typ parametru | tylko do odczytu |
Dokumentacja | min_dynamic_shared_memory |
shared_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 16-1073741823 |
Typ parametru | static |
Dokumentacja | shared_buffers |
opis
Parametr shared_buffers
konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers
serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers
zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers
to memoryGib * 16384
.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers
to memoryGib * 32768
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej. |
Typ danych | wyliczanie |
Domyślna wartość | mmap |
Dozwolone wartości | mmap |
Typ parametru | tylko do odczytu |
Dokumentacja | shared_memory_type |
temp_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych. |
Typ danych | integer |
Domyślna wartość | 1024 |
Dozwolone wartości | 100-1073741823 |
Typ parametru | dynamiczna |
Dokumentacja | temp_buffers |
work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego. |
Typ danych | integer |
Domyślna wartość | 4096 |
Dozwolone wartości | 4096-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | work_mem |
opis
Parametr work_mem
w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej sesji każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem
jest przydzielane w przestrzeni pamięci prywatnej na sesję lub na zapytanie. Ustawiając odpowiedni work_mem
rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
- Pamięć połączenia prywatnego:
work_mem
jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć różni się od używanego obszarushared_buffers
pamięci udostępnionej. - Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia
work_mem
. Proste zapytania, takie jakSELECT 1
, są mało prawdopodobne, aby wymagaćwork_mem
. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów 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 sugeruje potencjalną potrzebę zwiększenia
work_mem
. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem
, często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_mem
wartości dla tego użytkownika.ALTER ROLE
Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie
work_mem
wartości na poziomie określonej funkcji lub procedury może być korzystne.ALTER FUNCTION
Użyj polecenia lubALTER PROCEDURE
, aby w szczególności przydzielić więcej pamięci do tych operacji.Poziom bazy danych: zmień
work_mem
na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie
work_mem
wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonejwork_mem
wartości.
Określanie minimalnej wartości work_mem dla operacji sortowania
Aby znaleźć minimalną work_mem
wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_mem
nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak:SET work_mem TO '25MB'
. - Uruchom
EXPLAIN ANALYZE
na problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB"
. Jeśli wskazuje"external merge Disk: xkB"
wartość , zwiększ wartość przyrostowo i ponownie przetestujwork_mem
, dopóki"quicksort Memory"
nie zostanie wyświetlona. Wygląd sygnałów"quicksort Memory"
, ż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
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
Typ danych | integer |
Domyślna wartość | -1 |
Dozwolone wartości | -1-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | autovacuum_work_mem |
dynamic_shared_memory_type
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
Typ danych | wyliczanie |
Domyślna wartość | posix |
Dozwolone wartości | posix |
Typ parametru | tylko do odczytu |
Dokumentacja | dynamic_shared_memory_type |
hash_mem_multiplier
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wiele work_mem do użycia w przypadku tabel skrótów. |
Typ danych | numeryczne |
Domyślna wartość | 1 |
Dozwolone wartości | 1-1000 |
Typ parametru | dynamiczna |
Dokumentacja | hash_mem_multiplier |
huge_pages
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne. |
Typ danych | wyliczanie |
Domyślna wartość | try |
Dozwolone wartości | on,off,try |
Typ parametru | static |
Dokumentacja | huge_pages |
opis
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba pominiętych wyszukiwania tłumaczenia (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci udostępnionej jest przydzielana dla udostępnionych.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Zalecenia
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pages
ustawienie naTRY
potrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers
.
huge_page_size
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Rozmiar ogromnej strony, która powinna być żądana. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0 |
Typ parametru | tylko do odczytu |
Dokumentacja | huge_page_size |
logical_decoding_work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego. |
Typ danych | integer |
Domyślna wartość | 65536 |
Dozwolone wartości | 64-2147483647 |
Typ parametru | dynamiczna |
Dokumentacja | logical_decoding_work_mem |
maintenance_work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 1024-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | maintenance_work_mem |
opis
maintenance_work_mem
to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM
, CREATE INDEX
i ALTER TABLE
. W przeciwieństwie do work_mem
metody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem
jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.
Kwestie kluczowe
- Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie
maintenance_work_mem
wartości , należy pamiętać, żeVACUUM
ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci. - Separacja pamięci dla automatycznego czyszczenia: możesz użyć
autovacuum_work_mem
ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem
Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem
domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem
zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem
to (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0-262143 |
Typ parametru | static |
Dokumentacja | max_prepared_transactions |
max_stack_depth
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną głębokość stosu w kilobajtach. |
Typ danych | integer |
Domyślna wartość | 2048 |
Dozwolone wartości | 2048 |
Typ parametru | tylko do odczytu |
Dokumentacja | max_stack_depth |
min_dynamic_shared_memory
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ilość pamięci udostępnionej dynamicznej zarezerwowanej podczas uruchamiania. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0 |
Typ parametru | tylko do odczytu |
Dokumentacja | min_dynamic_shared_memory |
shared_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 16-1073741823 |
Typ parametru | static |
Dokumentacja | shared_buffers |
opis
Parametr shared_buffers
konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers
serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers
zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers
to memoryGib * 16384
.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers
to memoryGib * 32768
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej. |
Typ danych | wyliczanie |
Domyślna wartość | mmap |
Dozwolone wartości | mmap |
Typ parametru | tylko do odczytu |
Dokumentacja | shared_memory_type |
temp_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych. |
Typ danych | integer |
Domyślna wartość | 1024 |
Dozwolone wartości | 100-1073741823 |
Typ parametru | dynamiczna |
Dokumentacja | temp_buffers |
work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego. |
Typ danych | integer |
Domyślna wartość | 4096 |
Dozwolone wartości | 4096-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | work_mem |
opis
Parametr work_mem
w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej sesji każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem
jest przydzielane w przestrzeni pamięci prywatnej na sesję lub na zapytanie. Ustawiając odpowiedni work_mem
rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
- Pamięć połączenia prywatnego:
work_mem
jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć różni się od używanego obszarushared_buffers
pamięci udostępnionej. - Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia
work_mem
. Proste zapytania, takie jakSELECT 1
, są mało prawdopodobne, aby wymagaćwork_mem
. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów 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 sugeruje potencjalną potrzebę zwiększenia
work_mem
. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem
, często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_mem
wartości dla tego użytkownika.ALTER ROLE
Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie
work_mem
wartości na poziomie określonej funkcji lub procedury może być korzystne.ALTER FUNCTION
Użyj polecenia lubALTER PROCEDURE
, aby w szczególności przydzielić więcej pamięci do tych operacji.Poziom bazy danych: zmień
work_mem
na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie
work_mem
wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonejwork_mem
wartości.
Określanie minimalnej wartości work_mem dla operacji sortowania
Aby znaleźć minimalną work_mem
wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_mem
nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak:SET work_mem TO '25MB'
. - Uruchom
EXPLAIN ANALYZE
na problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB"
. Jeśli wskazuje"external merge Disk: xkB"
wartość , zwiększ wartość przyrostowo i ponownie przetestujwork_mem
, dopóki"quicksort Memory"
nie zostanie wyświetlona. Wygląd sygnałów"quicksort Memory"
, ż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
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
Typ danych | integer |
Domyślna wartość | -1 |
Dozwolone wartości | -1-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | autovacuum_work_mem |
dynamic_shared_memory_type
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
Typ danych | wyliczanie |
Domyślna wartość | posix |
Dozwolone wartości | posix |
Typ parametru | tylko do odczytu |
Dokumentacja | dynamic_shared_memory_type |
hash_mem_multiplier
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wiele work_mem do użycia w przypadku tabel skrótów. |
Typ danych | numeryczne |
Domyślna wartość | 1 |
Dozwolone wartości | 1-1000 |
Typ parametru | dynamiczna |
Dokumentacja | hash_mem_multiplier |
huge_pages
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne. |
Typ danych | wyliczanie |
Domyślna wartość | try |
Dozwolone wartości | on,off,try |
Typ parametru | static |
Dokumentacja | huge_pages |
opis
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba pominiętych wyszukiwania tłumaczenia (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci udostępnionej jest przydzielana dla udostępnionych.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Zalecenia
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pages
ustawienie naTRY
potrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers
.
logical_decoding_work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną pamięć do użycia na potrzeby dekodowania logicznego. |
Typ danych | integer |
Domyślna wartość | 65536 |
Dozwolone wartości | 64-2147483647 |
Typ parametru | dynamiczna |
Dokumentacja | logical_decoding_work_mem |
maintenance_work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 1024-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | maintenance_work_mem |
opis
maintenance_work_mem
to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM
, CREATE INDEX
i ALTER TABLE
. W przeciwieństwie do work_mem
metody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem
jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.
Kwestie kluczowe
- Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie
maintenance_work_mem
wartości , należy pamiętać, żeVACUUM
ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci. - Separacja pamięci dla automatycznego czyszczenia: możesz użyć
autovacuum_work_mem
ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem
Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem
domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem
zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem
to (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0-262143 |
Typ parametru | static |
Dokumentacja | max_prepared_transactions |
max_stack_depth
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną głębokość stosu w kilobajtach. |
Typ danych | integer |
Domyślna wartość | 2048 |
Dozwolone wartości | 2048 |
Typ parametru | tylko do odczytu |
Dokumentacja | max_stack_depth |
shared_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 16-1073741823 |
Typ parametru | static |
Dokumentacja | shared_buffers |
opis
Parametr shared_buffers
konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers
serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers
zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers
to memoryGib * 16384
.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers
to memoryGib * 32768
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej. |
Typ danych | wyliczanie |
Domyślna wartość | mmap |
Dozwolone wartości | mmap |
Typ parametru | tylko do odczytu |
Dokumentacja | shared_memory_type |
temp_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych. |
Typ danych | integer |
Domyślna wartość | 1024 |
Dozwolone wartości | 100-1073741823 |
Typ parametru | dynamiczna |
Dokumentacja | temp_buffers |
work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego. |
Typ danych | integer |
Domyślna wartość | 4096 |
Dozwolone wartości | 4096-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | work_mem |
opis
Parametr work_mem
w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej sesji każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem
jest przydzielane w przestrzeni pamięci prywatnej na sesję lub na zapytanie. Ustawiając odpowiedni work_mem
rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
- Pamięć połączenia prywatnego:
work_mem
jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć różni się od używanego obszarushared_buffers
pamięci udostępnionej. - Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia
work_mem
. Proste zapytania, takie jakSELECT 1
, są mało prawdopodobne, aby wymagaćwork_mem
. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów 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 sugeruje potencjalną potrzebę zwiększenia
work_mem
. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem
, często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_mem
wartości dla tego użytkownika.ALTER ROLE
Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie
work_mem
wartości na poziomie określonej funkcji lub procedury może być korzystne.ALTER FUNCTION
Użyj polecenia lubALTER PROCEDURE
, aby w szczególności przydzielić więcej pamięci do tych operacji.Poziom bazy danych: zmień
work_mem
na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie
work_mem
wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonejwork_mem
wartości.
Określanie minimalnej wartości work_mem dla operacji sortowania
Aby znaleźć minimalną work_mem
wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_mem
nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak:SET work_mem TO '25MB'
. - Uruchom
EXPLAIN ANALYZE
na problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB"
. Jeśli wskazuje"external merge Disk: xkB"
wartość , zwiększ wartość przyrostowo i ponownie przetestujwork_mem
, dopóki"quicksort Memory"
nie zostanie wyświetlona. Wygląd sygnałów"quicksort Memory"
, ż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
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
Typ danych | integer |
Domyślna wartość | -1 |
Dozwolone wartości | -1-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | autovacuum_work_mem |
dynamic_shared_memory_type
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
Typ danych | wyliczanie |
Domyślna wartość | posix |
Dozwolone wartości | posix |
Typ parametru | tylko do odczytu |
Dokumentacja | dynamic_shared_memory_type |
hash_mem_multiplier
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wiele work_mem do użycia w przypadku tabel skrótów. |
Typ danych | numeryczne |
Domyślna wartość | 1 |
Dozwolone wartości | 1-1000 |
Typ parametru | dynamiczna |
Dokumentacja | hash_mem_multiplier |
huge_pages
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne. |
Typ danych | wyliczanie |
Domyślna wartość | try |
Dozwolone wartości | on,off,try |
Typ parametru | static |
Dokumentacja | huge_pages |
opis
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba pominiętych wyszukiwania tłumaczenia (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci udostępnionej jest przydzielana dla udostępnionych.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Zalecenia
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pages
ustawienie naTRY
potrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers
.
maintenance_work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 1024-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | maintenance_work_mem |
opis
maintenance_work_mem
to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM
, CREATE INDEX
i ALTER TABLE
. W przeciwieństwie do work_mem
metody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem
jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.
Kwestie kluczowe
- Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie
maintenance_work_mem
wartości , należy pamiętać, żeVACUUM
ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci. - Separacja pamięci dla automatycznego czyszczenia: możesz użyć
autovacuum_work_mem
ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem
Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem
domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem
zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem
to (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0-262143 |
Typ parametru | static |
Dokumentacja | max_prepared_transactions |
max_stack_depth
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną głębokość stosu w kilobajtach. |
Typ danych | integer |
Domyślna wartość | 2048 |
Dozwolone wartości | 2048 |
Typ parametru | tylko do odczytu |
Dokumentacja | max_stack_depth |
shared_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 16-1073741823 |
Typ parametru | static |
Dokumentacja | shared_buffers |
opis
Parametr shared_buffers
konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers
serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers
zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers
to memoryGib * 16384
.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers
to memoryGib * 32768
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wybiera implementację pamięci udostępnionej używaną dla głównego regionu pamięci udostępnionej. |
Typ danych | wyliczanie |
Domyślna wartość | mmap |
Dozwolone wartości | mmap |
Typ parametru | tylko do odczytu |
Dokumentacja | shared_memory_type |
temp_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych. |
Typ danych | integer |
Domyślna wartość | 1024 |
Dozwolone wartości | 100-1073741823 |
Typ parametru | dynamiczna |
Dokumentacja | temp_buffers |
work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego. |
Typ danych | integer |
Domyślna wartość | 4096 |
Dozwolone wartości | 4096-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | work_mem |
opis
Parametr work_mem
w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej sesji każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem
jest przydzielane w przestrzeni pamięci prywatnej na sesję lub na zapytanie. Ustawiając odpowiedni work_mem
rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
- Pamięć połączenia prywatnego:
work_mem
jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć różni się od używanego obszarushared_buffers
pamięci udostępnionej. - Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia
work_mem
. Proste zapytania, takie jakSELECT 1
, są mało prawdopodobne, aby wymagaćwork_mem
. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów 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 sugeruje potencjalną potrzebę zwiększenia
work_mem
. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem
, często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_mem
wartości dla tego użytkownika.ALTER ROLE
Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie
work_mem
wartości na poziomie określonej funkcji lub procedury może być korzystne.ALTER FUNCTION
Użyj polecenia lubALTER PROCEDURE
, aby w szczególności przydzielić więcej pamięci do tych operacji.Poziom bazy danych: zmień
work_mem
na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie
work_mem
wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonejwork_mem
wartości.
Określanie minimalnej wartości work_mem dla operacji sortowania
Aby znaleźć minimalną work_mem
wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_mem
nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak:SET work_mem TO '25MB'
. - Uruchom
EXPLAIN ANALYZE
na problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB"
. Jeśli wskazuje"external merge Disk: xkB"
wartość , zwiększ wartość przyrostowo i ponownie przetestujwork_mem
, dopóki"quicksort Memory"
nie zostanie wyświetlona. Wygląd sygnałów"quicksort Memory"
, ż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
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną pamięć, która ma być używana przez każdy proces roboczy automatycznego czyszczenia. |
Typ danych | integer |
Domyślna wartość | -1 |
Dozwolone wartości | -1-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | autovacuum_work_mem |
dynamic_shared_memory_type
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Wybiera użytą implementację pamięci udostępnionej dynamicznej. |
Typ danych | wyliczanie |
Domyślna wartość | posix |
Dozwolone wartości | posix |
Typ parametru | tylko do odczytu |
Dokumentacja | dynamic_shared_memory_type |
huge_pages
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Włącza/wyłącza korzystanie z ogromnych stron pamięci. To ustawienie nie ma zastosowania do serwerów mających mniej niż 4 rdzenie wirtualne. |
Typ danych | wyliczanie |
Domyślna wartość | try |
Dozwolone wartości | on,off,try |
Typ parametru | static |
Dokumentacja | huge_pages |
opis
Ogromne strony to funkcja umożliwiająca zarządzanie pamięcią w większych blokach. Zazwyczaj można zarządzać blokami o maksymalnie 2 MB, a nie standardowymi stronami 4 KB.
Korzystanie z ogromnych stron może oferować zalety wydajności, które skutecznie odciążają procesor CPU:
- Zmniejszają one obciążenie związane z zadaniami zarządzania pamięcią, takimi jak mniejsza liczba pominiętych wyszukiwania tłumaczenia (TLB).
- Skracają czas potrzebny do zarządzania pamięcią.
W szczególności w usłudze PostgreSQL można używać ogromnych stron tylko dla obszaru pamięci udostępnionej. Znaczna część obszaru pamięci udostępnionej jest przydzielana dla udostępnionych.
Kolejną zaletą jest to, że ogromne strony uniemożliwiają zamianę obszaru pamięci udostępnionej na dysk, co dodatkowo stabilizuje wydajność.
Zalecenia
- W przypadku serwerów, które mają znaczne zasoby pamięci, należy unikać wyłączania ogromnych stron. Wyłączenie ogromnych stron może naruszyć wydajność.
- Jeśli zaczniesz od mniejszego serwera, który nie obsługuje ogromnych stron, ale przewidujesz skalowanie w górę do serwera, który to robi, zachowaj
huge_pages
ustawienie naTRY
potrzeby bezproblemowego przejścia i optymalnej wydajności.
Uwagi specyficzne dla platformy Azure
W przypadku serwerów z co najmniej czterema rdzeniami wirtualnymi ogromne strony są automatycznie przydzielane z bazowego systemu operacyjnego. Ta funkcja nie jest dostępna dla serwerów z mniej niż czterema rdzeniami wirtualnymi. Liczba ogromnych stron jest automatycznie dostosowywana w przypadku zmiany ustawień pamięci udostępnionej, w tym zmian w pliku shared_buffers
.
maintenance_work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną ilość pamięci, która ma być używana na potrzeby operacji konserwacji, takich jak VACUUM, Create Index. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 1024-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | maintenance_work_mem |
opis
maintenance_work_mem
to parametr konfiguracji w usłudze PostgreSQL. Zarządza ilością pamięci przydzielonej do operacji konserwacji, takich jak VACUUM
, CREATE INDEX
i ALTER TABLE
. W przeciwieństwie do work_mem
metody , która ma wpływ na alokację pamięci dla operacji zapytań, maintenance_work_mem
jest zarezerwowana dla zadań, które utrzymują i optymalizują strukturę bazy danych.
Kwestie kluczowe
- Limit pamięci próżniowej: jeśli chcesz przyspieszyć czyszczenie martwych krotki przez zwiększenie
maintenance_work_mem
wartości , należy pamiętać, żeVACUUM
ma wbudowane ograniczenie dotyczące zbierania martwych identyfikatorów krotki. W tym procesie może być używane tylko do 1 GB pamięci. - Separacja pamięci dla automatycznego czyszczenia: możesz użyć
autovacuum_work_mem
ustawienia , aby kontrolować pamięć, która automatycznie używa operacji czyszczenia niezależnie. To ustawienie działa jako podzbiór .maintenance_work_mem
Możesz zdecydować, ile jest używanych automatycznego czyszczenia pamięci bez wpływu na alokację pamięci dla innych zadań konserwacji i operacji definicji danych.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru maintenance_work_mem
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie będą miały żadnego wpływu na wartość maintenance_work_mem
domyślną parametru serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru maintenance_work_mem
zgodnie z wartościami w poniższej formule.
Formuła użyta do obliczenia wartości maintenance_work_mem
to (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę jednocześnie przygotowanych transakcji. Podczas uruchamiania serwera repliki należy ustawić ten parametr na tę samą lub wyższą wartość niż na serwerze podstawowym. |
Typ danych | integer |
Domyślna wartość | 0 |
Dozwolone wartości | 0-262143 |
Typ parametru | static |
Dokumentacja | max_prepared_transactions |
max_stack_depth
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną głębokość stosu w kilobajtach. |
Typ danych | integer |
Domyślna wartość | 2048 |
Dozwolone wartości | 2048 |
Typ parametru | tylko do odczytu |
Dokumentacja | max_stack_depth |
shared_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia liczbę pamięci udostępnionej używanych przez serwer. Jednostka to 8 kb. Dozwolone wartości znajdują się w zakresie 10% — 75% dostępnej pamięci. |
Typ danych | integer |
Domyślna wartość | Zależy od zasobów (rdzeni wirtualnych, pamięci RAM lub miejsca na dysku) przydzielonych do serwera. |
Dozwolone wartości | 16-1073741823 |
Typ parametru | static |
Dokumentacja | shared_buffers |
opis
Parametr shared_buffers
konfiguracji określa ilość pamięci systemowej przydzielonej do bazy danych PostgreSQL na potrzeby buforowania danych. Służy jako scentralizowana pula pamięci, która jest dostępna dla wszystkich procesów bazy danych.
Gdy dane są potrzebne, proces bazy danych najpierw sprawdza udostępniony bufor. Jeśli wymagane dane są obecne, są szybko pobierane i pomijają bardziej czasochłonny odczyt dysku. Udostępnione służą jako pośrednik między procesami bazy danych a dyskiem, a skutecznie zmniejszają liczbę wymaganych operacji we/wy.
Uwagi specyficzne dla platformy Azure
Wartość domyślna parametru shared_buffers
serwera jest obliczana podczas aprowizowania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL na podstawie nazwy produktu wybranej dla jego obliczeń. Wszelkie kolejne zmiany wyboru produktu do obliczeń, które obsługują serwer elastyczny, nie mają żadnego wpływu na wartość domyślną parametru shared_buffers
serwera tego wystąpienia.
Za każdym razem, gdy zmienisz produkt przypisany do wystąpienia, należy również dostosować wartość parametru shared_buffers
zgodnie z wartościami w poniższych formułach.
W przypadku maszyn wirtualnych z maksymalnie 2 giB pamięci formuła używana do obliczenia wartości shared_buffers
to memoryGib * 16384
.
W przypadku maszyn wirtualnych z więcej niż 2 GiB formuła używana do obliczenia wartości shared_buffers
to memoryGib * 32768
.
Na podstawie poprzedniej formuły w poniższej tabeli wymieniono wartości, które ten parametr serwera zostałby ustawiony w zależności od ilości aprowizowanej pamięci:
Rozmiar pamięci | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
temp_buffers
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia maksymalną liczbę tymczasowych używanych przez każdą sesję bazy danych. |
Typ danych | integer |
Domyślna wartość | 1024 |
Dozwolone wartości | 100-1073741823 |
Typ parametru | dynamiczna |
Dokumentacja | temp_buffers |
work_mem
Atrybut | Wartość |
---|---|
Kategoria | Użycie zasobów/pamięć |
opis | Ustawia ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysku tymczasowego. |
Typ danych | integer |
Domyślna wartość | 4096 |
Dozwolone wartości | 4096-2097151 |
Typ parametru | dynamiczna |
Dokumentacja | work_mem |
opis
Parametr work_mem
w usłudze PostgreSQL kontroluje ilość pamięci przydzielonej dla niektórych operacji wewnętrznych w obszarze pamięci prywatnej sesji każdej sesji bazy danych. Przykłady tych operacji to sortowanie i skróty.
W przeciwieństwie do udostępnionych, które znajdują się w obszarze pamięci udostępnionej, work_mem
jest przydzielane w przestrzeni pamięci prywatnej na sesję lub na zapytanie. Ustawiając odpowiedni work_mem
rozmiar, można znacznie zwiększyć wydajność tych operacji i zmniejszyć konieczność zapisywania danych tymczasowych na dysku.
Kwestie kluczowe
- Pamięć połączenia prywatnego:
work_mem
jest częścią pamięci prywatnej używanej przez każdą sesję bazy danych. Ta pamięć różni się od używanego obszarushared_buffers
pamięci udostępnionej. - Użycie specyficzne dla zapytania: nie wszystkie sesje lub zapytania używają polecenia
work_mem
. Proste zapytania, takie jakSELECT 1
, są mało prawdopodobne, aby wymagaćwork_mem
. Jednak złożone zapytania obejmujące operacje, takie jak sortowanie lub tworzenie skrótów, mogą używać jednego lub wielu fragmentów 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 sugeruje potencjalną potrzebę zwiększenia
work_mem
. - Przewodniki rozwiązywania problemów: użyj karty Wysokie pliki tymczasowe w przewodnikach rozwiązywania problemów, aby zidentyfikować problematyczne zapytania.
Szczegółowe dostosowanie
Chociaż zarządzasz parametrem work_mem
, często wydajniejsze jest wdrożenie podejścia do szczegółowego dostosowania, a nie ustawienia wartości globalnej. Takie podejście zapewnia przydzielenie pamięci w sposób rozsądny na podstawie konkretnych potrzeb procesów i użytkowników. Minimalizuje również ryzyko wystąpienia problemów z brakiem pamięci. Oto jak to zrobić:
Poziom użytkownika: jeśli określony użytkownik jest głównie zaangażowany w zadania agregacji lub raportowania, które intensywnie korzystają z pamięci, rozważ dostosowanie
work_mem
wartości dla tego użytkownika.ALTER ROLE
Użyj polecenia , aby zwiększyć wydajność operacji użytkownika.Poziom funkcji/procedury: Jeśli określone funkcje lub procedury generują znaczne pliki tymczasowe, zwiększenie
work_mem
wartości na poziomie określonej funkcji lub procedury może być korzystne.ALTER FUNCTION
Użyj polecenia lubALTER PROCEDURE
, aby w szczególności przydzielić więcej pamięci do tych operacji.Poziom bazy danych: zmień
work_mem
na poziomie bazy danych, jeśli tylko określone bazy danych generują dużą liczbę plików tymczasowych.Poziom globalny: Jeśli analiza systemu ujawnia, że większość zapytań generuje małe pliki tymczasowe, podczas gdy tylko kilka tworzy duże pliki, rozsądne może być globalne zwiększenie
work_mem
wartości. Ta akcja ułatwia przetwarzanie większości zapytań w pamięci, dzięki czemu można uniknąć operacji opartych na dyskach i zwiększyć wydajność. Należy jednak zawsze zachować ostrożność i monitorować wykorzystanie pamięci na serwerze, aby zapewnić obsługę zwiększonejwork_mem
wartości.
Określanie minimalnej wartości work_mem dla operacji sortowania
Aby znaleźć minimalną work_mem
wartość dla określonego zapytania, zwłaszcza taką, która generuje pliki dysku tymczasowego podczas procesu sortowania, zacznij od rozważenia tymczasowego rozmiaru pliku wygenerowanego podczas wykonywania zapytania. Jeśli na przykład zapytanie generuje plik tymczasowy o rozmiarze 20 MB:
- Nawiąż połączenie z bazą danych przy użyciu narzędzia psql lub preferowanego klienta PostgreSQL.
- Ustaw wartość początkową
work_mem
nieco większą niż 20 MB, aby uwzględnić dodatkowe nagłówki podczas przetwarzania w pamięci. Użyj polecenia, takiego jak:SET work_mem TO '25MB'
. - Uruchom
EXPLAIN ANALYZE
na problematycznym zapytaniu w tej samej sesji. - Przejrzyj dane wyjściowe dla elementu
"Sort Method: quicksort Memory: xkB"
. Jeśli wskazuje"external merge Disk: xkB"
wartość , zwiększ wartość przyrostowo i ponownie przetestujwork_mem
, dopóki"quicksort Memory"
nie zostanie wyświetlona. Wygląd sygnałów"quicksort Memory"
, ż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.