Udostępnij za pośrednictwem


Rozwiązywanie problemów z wysokim użyciem procesora CPU w usłudze Azure Database for PostgreSQL — serwer elastyczny

DOTYCZY: Azure Database for PostgreSQL — serwer elastyczny

W tym artykule pokazano, jak szybko zidentyfikować główną przyczynę wysokiego wykorzystania procesora CPU i możliwe akcje naprawcze w celu kontrolowania wykorzystania procesora CPU podczas korzystania z elastycznego serwera usługi Azure Database for PostgreSQL.

Z tego artykułu dowiesz się:

  • Informacje o przewodnikach rozwiązywania problemów w celu identyfikowania i uzyskiwania zaleceń w celu ograniczenia głównych przyczyn.
  • Informacje o narzędziach do identyfikowania wysokiego użycia procesora CPU, takich jak metryki platformy Azure, magazyn zapytań i pg_stat_statements.
  • Jak zidentyfikować główne przyczyny, takie jak długotrwałe zapytania i łączne połączenia.
  • Jak rozwiązać problemy z wysokim użyciem procesora CPU przy użyciu tabel Wyjaśnij analizę, Buforowanie połączeń i Opróżnianie.

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 ograniczenia wysokiego użycia procesora CPU. 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 procesora CPU

Rozważ te narzędzia, aby zidentyfikować wysokie wykorzystanie procesora CPU.

Metryki platformy Azure

Metryki platformy Azure to dobry punkt wyjścia do sprawdzenia wykorzystania procesora CPU dla określonej daty i okresu. Metryki zawierają informacje o czasie trwania, w którym wykorzystanie procesora CPU jest wysokie. Porównaj wykresy operacji we/wy zapisu, operacji we/wy odczytu, przepływności odczytu i przepływności zapisu przy użyciu procesora CPU, aby dowiedzieć się, kiedy obciążenie spowodowało wysokie użycie procesora CPU. W celu proaktywnego monitorowania można skonfigurować 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 i zachowuje je do przeglądu. Wycinekuje dane według czasu, aby można było zobaczyć wzorce użycia czasowego. Dane dla wszystkich użytkowników, baz danych i zapytań są przechowywane w bazie danych o nazwie azure_sys w wystąpieniu serwera elastycznego usługi Azure Database for PostgreSQL. Aby uzyskać szczegółowe wskazówki, zobacz Magazyn zapytań.

pg_stat_statements

Rozszerzenie pg_stat_statements pomaga identyfikować zapytania, które zużywają czas na serwerze.

Średni lub średni czas wykonywania

W przypadku bazy danych Postgres w wersji 13 lub nowszej użyj następującej instrukcji, aby wyświetlić pięć pierwszych instrukcji SQL według średniego lub średniego czasu wykonywania:

SELECT userid::regrole, dbid, query, mean_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time
DESC LIMIT 5;

Całkowity czas wykonywania

Wykonaj następujące instrukcje, aby wyświetlić pięć pierwszych instrukcji SQL według łącznego czasu wykonywania.

W przypadku bazy danych Postgres w wersji 13 lub nowszej użyj następującej instrukcji, aby wyświetlić pięć pierwszych instrukcji SQL według łącznego czasu wykonywania:

SELECT userid::regrole, dbid, query
FROM pg_stat_statements
ORDER BY total_exec_time
DESC LIMIT 5;

Identyfikowanie głównych przyczyn

Jeśli ogólne poziomy użycia procesora CPU są wysokie, możliwe mogą być następujące główne przyczyny:

Długotrwałe transakcje

Długotrwałe transakcje mogą zużywać zasoby procesora CPU, które mogą prowadzić do wysokiego wykorzystania procesora CPU.

Następujące zapytanie pomaga zidentyfikować połączenia uruchomione przez najdłuższy czas:

SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() and state IN ('idle in transaction', 'active')
ORDER BY duration DESC;

Łączna liczba połączeń i liczba połączeń według stanu

Duża liczba połączeń z bazą danych jest również kolejnym problemem, który może prowadzić do zwiększenia wykorzystania procesora CPU i pamięci.

Następujące zapytanie zawiera informacje o liczbie połączeń według stanu:

SELECT state, count(*)
FROM  pg_stat_activity
WHERE pid <> pg_backend_pid()
GROUP BY 1 ORDER BY 1;

Rozwiązywanie problemów z wysokim wykorzystaniem procesora CPU

Użyj funkcji Wyjaśnij analizę, pg Bouncer, buforowanie połączeń i kończenie długotrwałych transakcji, aby rozwiązać problemy z wysokim użyciem procesora CPU.

Korzystanie z funkcji Wyjaśnij analizę

Gdy znasz zapytanie, które działa przez długi czas, użyj polecenia WYJAŚNIj , aby dokładniej zbadać zapytanie i go dostroić.
Aby uzyskać więcej informacji na temat polecenia EXPLAIN, zapoznaj się z tematem Wyjaśnij plan.

PGBouncer i buforowanie połączeń

W sytuacjach, gdy istnieje wiele bezczynnych połączeń lub wiele połączeń, które zużywają procesor CPU, 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:

Pooler połączeń

Najlepsze praktyki

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

Kończenie długotrwałych transakcji

Możesz rozważyć zabicie długotrwałej transakcji jako opcji.

Aby zakończyć identyfikator PID sesji, należy wykryć identyfikator PID przy użyciu następującego zapytania:

SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() and state IN ('idle in transaction', 'active')
ORDER BY duration DESC;

Możesz również filtrować według innych właściwości, takich jak usename (nazwa użytkownika), datname (nazwa bazy danych) itp.

Po utworzeniu identyfikatora PID sesji możesz zakończyć użyć następującego zapytania:

SELECT pg_terminate_backend(pid);

Monitorowanie statystyk próżni i tabeli

Aktualizowanie statystyk tabeli pomaga zwiększyć wydajność zapytań. Monitoruj, czy przeprowadzane jest regularne automatyczne czyszczenie.

Poniższe zapytanie pomaga zidentyfikować tabele, które wymagają opróżniania:

select schemaname,relname,n_dead_tup,n_live_tup,last_vacuum,last_analyze,last_autovacuum,last_autoanalyze
from pg_stat_all_tables where n_live_tup > 0;

last_autovacuum kolumny i last_autoanalyze dają datę i godzinę ostatniego automatycznego czyszczenia lub przeanalizowania tabeli. Jeśli tabele nie są regularnie opróżniane, wykonaj kroki w celu dostosowania automatycznego czyszczenia. Aby uzyskać więcej informacji na temat rozwiązywania problemów i dostrajania automatycznego czyszczenia, zobacz Rozwiązywanie problemów z automatycznym czyszczeniem.

Krótkoterminowe rozwiązaniem byłoby przeprowadzenie ręcznej analizy próżni tabel, w których widoczne są powolne zapytania:

vacuum analyze <table_name>;