Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób identyfikowania głównej przyczyny wysokiego wykorzystania procesora CPU. Umożliwia również podjęcie działań naprawczych, aby kontrolować wykorzystanie procesora podczas korzystania z 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 identyfikować przyczyny źródłowe, takie jak długo wykonywane zapytania i łączna liczba połączeń.
- Jak rozwiązać problem wysokiego wykorzystania procesora za pomocą EXPLAIN ANALYZE, puli połączeń i odkurzania tabel.
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ć instrukcje rozwiązywania problemów i korzystać z nich, wykonaj czynności opisane w Konfigurowanie instrukcji rozwiązywania problemów.
Narzędzia do identyfikowania wysokiego wykorzystania procesora CPU
Rozważ użycie poniższej listy narzędzi do identyfikowania wysokiego wykorzystania procesora CPU.
Metryki Azure
Metryki platformy Azure to dobry punkt wyjścia do sprawdzenia wykorzystania procesora CPU przez określony okres. Metryki dostarczają informacji o zasobach wykorzystywanych w okresie, gdy wykorzystanie procesora CPU jest wysokie. Porównaj wykresy operacji we/wy zapisu, operacji we/wy odczytu, przepustowości odczytu w bajtach/s i przepustowości zapisu w bajtach/s z wykresem procentu użycia procesora CPU, aby ustalić, kiedy obciążenie powodował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ń SQL
Magazyn zapytań automatycznie przechwytuje historię zapytań i statystyk środowiska uruchomieniowego i zachowuje je do przeglądu. Dzieli dane według czasu, dzięki czemu można zobaczyć wzorce użycia w czasie. 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 zużywają dużo czasu procesora w analizowanym okresie.
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 Postgresa w wersji 13 i nowszych użyj następującej instrukcji, aby wyświetlić pięć instrukcji SQL o najwyższym średnim czasie wykonania:
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, co może prowadzić do wysokiego użycia procesora.
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ąż problem wysokiego użycia 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 menedżer 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 puler połączeń oraz najlepsze praktyki obsługi połączeń w PostgreSQL
Usługa Azure Database for PostgreSQL oferuje narzędzie 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ć przerwanie długo trwającej transakcji.
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;
Kolumny last_autovacuum i last_autoanalyze podają datę i godzinę ostatniego automatycznego odkurzania lub analizy 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 z autovacuum i jego dostrajania, zobacz Rozwiązywanie problemów z autovacuum.
Krótkoterminowe rozwiązaniem byłoby przeprowadzenie ręcznej analizy próżni tabel, w których widoczne są powolne zapytania:
VACUUM ANALYZE <table>;
Treści powiązane
- Rozwiązywanie problemów z wysokim wykorzystaniem pamięci w usłudze Azure Database for PostgreSQL.
- Rozwiązywanie problemów dotyczących wysokiego wykorzystania IOPS w usłudze Azure Database for PostgreSQL.
- Jak rozwiązywać problemy i identyfikować wolne wykonywanie zapytań w usłudze Azure Database for PostgreSQL.
- Parametry w usłudze Azure Database for PostgreSQL.
- Konfiguracja automatycznego czyszczenia w usłudze Azure Database for PostgreSQL