Wysokie wykorzystanie pamięci w usłudze Azure Database for PostgreSQL — serwer elastyczny
DOTYCZY: Azure Database for PostgreSQL — serwer elastyczny
W tym artykule przedstawiono typowe scenariusze i główne przyczyny, które mogą prowadzić do wysokiego wykorzystania pamięci na serwerze elastycznym usługi Azure Database for PostgreSQL.
W tym artykule podano informacje o:
- Informacje o przewodnikach rozwiązywania problemów w celu identyfikowania i uzyskiwania zaleceń w celu ograniczenia głównych przyczyn.
- Narzędzia do identyfikowania wysokiego wykorzystania pamięci.
- Przyczyny dużych akcji pamięci i korygowania.
Przewodniki rozwiązywania problemów
Korzystając z przewodników rozwiązywania problemów z funkcją, które są dostępne w portalu serwera elastycznego usługi Azure Database for PostgreSQL, można znaleźć prawdopodobną główną przyczynę i zalecenia dotyczące ograniczania wysokiego poziomu pamięci. Jak skonfigurować przewodniki rozwiązywania problemów, aby ich używać, postępuj zgodnie z przewodnikami rozwiązywania problemów z konfiguracją.
Narzędzia do identyfikowania wysokiego wykorzystania pamięci
Rozważ następujące narzędzia, aby zidentyfikować wysokie wykorzystanie pamięci.
Metryki platformy Azure
Użyj metryk platformy Azure, aby monitorować procent pamięci używanej dla określonej daty i przedziału czasu.
W celu proaktywnego monitorowania skonfiguruj alerty dotyczące metryk. Aby uzyskać szczegółowe wskazówki, zobacz Azure Metrics (Metryki platformy Azure).
Magazyn zapytań
Magazyn zapytań automatycznie przechwytuje historię zapytań i statystyk środowiska uruchomieniowego oraz zachowuje je do przeglądu.
Magazyn zapytań może skorelować informacje o zdarzeniu oczekiwania za pomocą statystyk czasu wykonywania zapytania. Użyj magazynu zapytań, aby zidentyfikować zapytania, które mają duże zużycie pamięci w okresie zainteresowania.
Aby uzyskać więcej informacji na temat konfigurowania i używania magazynu zapytań, zobacz Magazyn zapytań.
Przyczyny i działania naprawcze
Rozważ następujące przyczyny i akcje korygujące dotyczące rozwiązywania problemów z wysokim wykorzystaniem pamięci.
Parametry serwera
Następujące parametry serwera mają wpływ na użycie pamięci i należy je przejrzeć:
Work_Mem
Parametr work_mem
określa ilość pamięci, która ma być używana przez wewnętrzne operacje sortowania i tabele skrótów przed zapisaniem w plikach dysków tymczasowych. Nie jest ona raczej oparta na poszczególnych zapytaniach, jest ustawiana na podstawie liczby operacji sortowania i wyznaczania wartości skrótu.
Jeśli obciążenie ma wiele krótko działających zapytań z prostymi sprzężeniami i minimalnymi operacjami sortowania, zaleca się zachowanie niższego poziomu work_mem
. Jeśli istnieje kilka aktywnych zapytań ze złożonymi sprzężeniami i sortowaniami, zaleca się ustawienie wyższej wartości dla work_mem.
Trudno jest uzyskać wartość work_mem
prawa. Jeśli zauważysz duże wykorzystanie pamięci lub problemy z brakiem pamięci, rozważ zmniejszenie wartości work_mem
.
Bezpieczniejsze ustawienie dla work_mem
programu to work_mem = Total RAM / Max_Connections / 16
Wartość domyślna work_mem
= 4 MB. Wartość na wielu poziomach, w tym na poziomie serwera, można ustawić work_mem
za pośrednictwem strony parametrów w witrynie Azure Portal.
Dobrą strategią jest monitorowanie zużycia pamięci w godzinach szczytu.
Jeśli w tym czasie występują sortowania dysków i jest dużo nieużywanej pamięci, stopniowo zwiększaj work_mem
się, dopóki nie będzie można osiągnąć dobrej równowagi między dostępną i używaną pamięcią Podobnie, jeśli użycie pamięci wygląda na wysokim poziomie, zmniejsz wartość work_mem
.
Maintenance_Work_Mem
maintenance_work_mem
jest przeznaczony do zadań konserwacji, takich jak opróżnianie, dodawanie indeksów lub kluczy obcych. Użycie pamięci w tym scenariuszu jest na sesję.
Rozważmy na przykład scenariusz, w którym działają trzy procesy robocze automatycznego czyszczenia.
Jeśli maintenance_work_mem
ustawiono wartość 1 GB, wszystkie połączone sesje będą używać 3 GB pamięci.
Duża maintenance_work_mem
wartość wraz z wieloma uruchomionymi sesjami w celu opróżniania/tworzenia indeksu/dodawania kluczy obcych może spowodować wysokie wykorzystanie pamięci. Maksymalna dozwolona wartość parametru maintenance_work_mem
serwera na serwerze elastycznym usługi Azure Database for PostgreSQL wynosi 2 GB.
udostępnione
Parametr shared_buffers
określa ilość pamięci dedykowanej serwerowi do buforowania danych. Celem udostępnionych jest zmniejszenie operacji we/wy dysku.
Rozsądnym ustawieniem dla udostępnionych jest 25% pamięci RAM. Ustawienie wartości większej niż 40% pamięci RAM nie jest zalecane w przypadku większości typowych obciążeń.
Maksymalna liczba połączeń
Wszystkie nowe i bezczynne połączenia w elastycznej bazie danych serwera usługi Azure Database for PostgreSQL zużywają do 2 MB pamięci. Jednym ze sposobów monitorowania połączeń jest użycie następującego zapytania:
select count(*) from pg_stat_activity;
Gdy liczba połączeń z bazą danych jest wysoka, zwiększa się również zużycie pamięci.
W sytuacjach, gdy istnieje wiele połączeń z bazą danych, rozważ użycie modułu puli połączeń, takiego jak PgBouncer.
Aby uzyskać więcej informacji na temat narzędzia PgBouncer, zapoznaj się z tematem:
Program puli połączeń.
Serwer elastyczny usługi Azure Database for PostgreSQL oferuje rozwiązanie PgBouncer jako wbudowane rozwiązanie do buforowania połączeń. Aby uzyskać więcej informacji, zobacz PgBouncer.
Wyjaśnienie analizy
Po zidentyfikowaniu zapytań zużywających duże ilości pamięci z magazynu zapytań użyj funkcji WYJAŚNIJ i WYJAŚNIJ ANALIZĘ, aby dokładniej je zbadać i dostosować.
Aby uzyskać więcej informacji na temat polecenia EXPLAIN, zapoznaj się z tematem Wyjaśnij plan.