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 opisano sposób identyfikowania głównej przyczyny wysokiego wykorzystania procesora CPU. Umożliwia również korygowanie akcji w celu kontrolowania wykorzystania procesora CPU podczas korzystania z elastycznego serwera usługi Azure Database for PostgreSQL.
W tym artykule możesz dowiedzieć 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, można zidentyfikować prawdopodobną główną przyczynę scenariusza wysokiego użycia procesora CPU i zapoznać się z zaleceniami, aby wyeliminować znaleziony problem.
Aby dowiedzieć się, jak skonfigurować przewodniki rozwiązywania problemów i korzystać z nich, postępuj zgodnie z przewodnikami rozwiązywania problemów z konfiguracją.
Narzędzia do identyfikowania wysokiego wykorzystania procesora CPU
Rozważ użycie poniższej listy narzędzi do identyfikowania wysokiego wykorzystania procesora CPU.
Metryki platformy Azure
Metryki platformy Azure to dobry punkt wyjścia do sprawdzenia wykorzystania procesora CPU przez określony okres. Metryki zawierają informacje o zasobach używanych w okresie, w którym wysokie wykorzystanie procesora CPU. Porównaj wykresy operacji we/wy zapisu, operacji we/wy odczytu, bajtów przepływności odczytu/s i Bajty przepływności zapisu/s z procentem 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. Wycinek danych według czasu, dzięki czemu można 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.
Magazyn zapytań może skorelować informacje o zdarzeniach oczekiwania ze statystykami czasu wykonywania zapytania. Użyj magazynu zapytań, aby zidentyfikować zapytania, które mają wysokie użycie procesora CPU w okresie zainteresowania.
Aby uzyskać więcej informacji, zobacz magazyn zapytań.
pg_stat_statements
Rozszerzenie pg_stat_statements
pomaga identyfikować zapytania, które zużywają czas na serwerze. Aby uzyskać więcej informacji na temat tego rozszerzenia, zobacz jego dokumentację.
Ś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, mogą być możliwe 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 może również 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 state
ORDER BY state ASC;
Rozwiązywanie problemów z wysokim wykorzystaniem procesora CPU
Użyj funkcji WYJAŚNIJ ANALIZĘ, rozważ użycie wbudowanego modułu puli połączeń PgBouncer i zakończenie długotrwałych transakcji w celu rozwiązania wysokiego wykorzystania procesora CPU.
Korzystanie z FUNKCJI EXPLAIN ANALYZE
Gdy znasz zapytania zużywające więcej procesora CPU, użyj funkcji WYJAŚNIJ ANALIZĘ , aby dokładniej je zbadać i dostosować.
Aby uzyskać więcej informacji na temat polecenia EXPLAIN ANALYZE , zapoznaj się z jego dokumentacją.
PgBouncer, wbudowany moduł puli połączeń
W sytuacjach, gdy istnieje wiele krótkotrwałych połączeń lub wiele połączeń, które pozostają bezczynne przez większość ich życia, rozważ użycie modułu puli połączeń, takiego jak PgBouncer.
Aby uzyskać więcej informacji na temat narzędzia PgBouncer, zobacz artykuł connection pooler and connection handling best practices with PostgreSQL (Najlepsze rozwiązania dotyczące obsługi połączeń w usłudze PostgreSQL)
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 znaleźć jego 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żna ją zakończyć przy użyciu 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>;
Podziel się swoimi sugestiami i usterkami z zespołem produktu usługi Azure Database for PostgreSQL.