Omówienie pamięci udostępnionej bazy danych PostgreSQL
Usługa PostgreSQL używa pamięci, którą można sklasyfikować jako:
- Pamięć lokalna — przydzielona do każdego procesu
- Pamięć współdzielona — używana przez wszystkie procesy
Pamięć lokalna
Każdy proces w usłudze PostgreSQL wymaga pamięci do przetwarzania zapytań. Następujące parametry serwera umożliwiają zdefiniowanie użycia pamięci:
work_mem definiuje pamięć wymaganą do sortowania krotki dla operacji ORDER BY i DISTINCT. Ten parametr określa ilość pamięci dostępnej dla operacji sortowania wewnętrznego i tabel skrótów. Jeśli masz dużą ilość dostępnej pamięci, a obciążenie ma zapytania ze złożonym sortowaniem, zwiększenie tej wartości parametru może zwiększyć wydajność, umożliwiając większe skanowanie w pamięci przed rozlaniem na dysk.
Jednak jedno złożone zapytanie może mieć wiele operacji sortowania i skrótów uruchomionych współbieżnie. Każda operacja używa tak dużej ilości pamięci, jak ta wartość umożliwia przed rozpoczęciem zapisywania na dyskach plików tymczasowych. W związku z tym w systemie zajętym łączne użycie pamięci jest wiele razy w przypadku pojedynczego parametru work_mem .
Aby dostroić tę wartość, użyj wartości Total RAM * 0,25 / max_connections jako wartości początkowej.
maintenance_work_mem pamięć jest wymagana przez próżnię i ponowne indeksowanie. Ten parametr określa ilość pamięci dostępnej dla operacji sortowania wewnętrznego i tabel skrótów. Wartość domyślna to 64 KB, ale zwiększenie tej wartości zwiększa wydajność czyszczenia.
autovacuum_work_mem ustawia maksymalną ilość pamięci, która ma być używana przez każdy proces automatycznego czyszczenia.
temp_buffers definiuje pamięć do przechowywania tabel tymczasowych. Ten parametr ustawia maksymalną liczbę tymczasowych buforów używanych przez każdą sesję bazy danych.
effective_cache_size definiuje ilość dostępnej pamięci do buforowania dysku przez system operacyjny i w bazie danych. Planista zapytań PostgreSQL określa, czy ta pamięć jest naprawiona w pamięci RAM. Skanowanie indeksów najprawdopodobniej będzie używane względem wyższych wartości; w przeciwnym razie są używane skanowania sekwencyjne, jeśli wartość jest niska.
Ustaw effective_cache_size na 50% całkowitej pamięci RAM maszyny.
Pamięć współdzielona
Pamięć udostępniona jest przydzielana podczas uruchamiania. Pamięć udostępniona jest używana dla:
shared_buffers definiuje bufory pamięci udostępnionej używane przez serwer. Usługa PostgreSQL ładuje strony tabel i indeksów z magazynu trwałego do udostępnionej puli buforów, a następnie działa na nich w pamięci. Ta udostępniona pula buforów jest głównym składnikiem pamięci udostępnionej używanej przez serwer. Wartość domyślna to 128 MB (w zależności od warstwy obliczeniowej). Jeśli zdecydujesz się przydzielić więcej pamięci, musisz ponownie uruchomić serwer.
wal_buffers definiuje liczbę buforów stron dysku w pamięci udostępnionej na potrzeby rejestrowania z wyprzedzeniem zapisu (WAL) przed zapisaniem go w magazynie trwałym.
Podsumowując, ważne parametry serwera odnoszące się do pamięci, które można dostroić, to:
- shared_buffers
- work_mem
- effective_cache_size