Monitorowanie wydajności przy użyciu magazynu zapytań

DOTYCZY: Azure Database for PostgreSQL — pojedynczy serwer

Ważne

Usługa Azure Database for PostgreSQL — pojedynczy serwer znajduje się na ścieżce wycofania. Zdecydowanie zalecamy uaktualnienie do usługi Azure Database for PostgreSQL — serwer elastyczny. Aby uzyskać więcej informacji na temat migracji do usługi Azure Database for PostgreSQL — serwer elastyczny, zobacz Co się dzieje z usługą Azure Database for PostgreSQL — pojedynczy serwer?.

Funkcja magazynu zapytań w usłudze Azure Database for PostgreSQL umożliwia śledzenie wydajności zapytań w czasie. Magazyn zapytań upraszcza rozwiązywanie problemów z wydajnością, ułatwiając szybkie znajdowanie najdłużej działających i najbardziej intensywnie korzystających z zasobów zapytań. Magazyn zapytań automatycznie przechwytuje historię zapytań i statystyk środowiska uruchomieniowego i zachowuje je do przeglądu. Oddziela dane według okien czasowych, aby można było zobaczyć wzorce użycia bazy danych. Dane dla wszystkich użytkowników, baz danych i zapytań są przechowywane w bazie danych o nazwie azure_sys w wystąpieniu usługi Azure Database for PostgreSQL.

Ważne

Nie należy modyfikować bazy danych azure_sys ani jej schematów. Uniemożliwi to prawidłowe działanie magazynu zapytań i powiązanych funkcji wydajności.

Włączanie magazynu zapytań

Magazyn zapytań jest funkcją zgody, więc nie jest domyślnie aktywna na serwerze. Magazyn jest włączony lub wyłączony globalnie dla wszystkich baz danych na danym serwerze i nie można go włączyć ani wyłączyć dla każdej bazy danych.

Włączanie magazynu zapytań przy użyciu witryny Azure Portal

  1. Zaloguj się do witryny Azure Portal i wybierz serwer usługi Azure Database for PostgreSQL.
  2. Wybierz pozycję Parametry serwera w sekcji Ustawienia menu.
  3. pg_qs.query_capture_mode Wyszukaj parametr .
  4. Ustaw wartość na TOP i Zapisz.

Aby włączyć statystyki oczekiwania w magazynie zapytań:

  1. pgms_wait_sampling.query_capture_mode Wyszukaj parametr .
  2. Ustaw wartość na ALL i Zapisz.

Możesz też ustawić te parametry przy użyciu interfejsu wiersza polecenia platformy Azure.

az postgres server configuration set --name pg_qs.query_capture_mode --resource-group myresourcegroup --server mydemoserver --value TOP
az postgres server configuration set --name pgms_wait_sampling.query_capture_mode --resource-group myresourcegroup --server mydemoserver --value ALL

Poczekaj do 20 minut na utrwalenie pierwszej partii danych w bazie danych azure_sys.

Informacje w magazynie zapytań

Magazyn zapytań ma dwa magazyny:

  • Magazyn statystyk środowiska uruchomieniowego do utrwalania informacji dotyczących statystyk wykonywania zapytań.
  • Magazyn statystyk oczekiwania na utrwalanie informacji statystycznych dotyczących oczekiwania.

Typowe scenariusze korzystania z magazynu zapytań obejmują:

  • Określanie liczby wykonań zapytania w danym przedziale czasu
  • Porównanie średniego czasu wykonywania zapytania w oknach czasu w celu wyświetlenia dużych różnic
  • Identyfikowanie najdłużej uruchomionych zapytań w ciągu ostatnich X godzin
  • Identyfikowanie pierwszych N zapytań oczekujących na zasoby
  • Opis charakteru oczekiwania dla określonego zapytania

Aby zminimalizować użycie miejsca, statystyki wykonywania środowiska uruchomieniowego w magazynie statystyk środowiska uruchomieniowego są agregowane w stałym, konfigurowalnym przedziale czasu. Informacje w tych magazynach są widoczne przez wykonywanie zapytań względem widoków magazynu zapytań.

Uzyskiwanie dostępu do informacji o magazynie zapytań

Dane magazynu zapytań są przechowywane w bazie danych azure_sys na serwerze Postgres.

Następujące zapytanie zwraca informacje o zapytaniach w magazynie zapytań:

SELECT * FROM query_store.qs_view; 

Lub to zapytanie dotyczące statystyk oczekiwania:

SELECT * FROM query_store.pgms_wait_sampling_view;

Znajdowanie zapytań oczekiwania

Typy zdarzeń oczekiwania łączą różne zdarzenia oczekiwania w zasobniki według podobieństwa. Magazyn zapytań udostępnia typ zdarzenia oczekiwania, konkretną nazwę zdarzenia oczekiwania i pytanie. Możliwość skorelowania tych informacji oczekiwania ze statystykami środowiska uruchomieniowego zapytania oznacza, że możesz lepiej zrozumieć, co przyczynia się do charakterystyki wydajności zapytań.

Poniżej przedstawiono kilka przykładów sposobu uzyskiwania większego wglądu w obciążenie przy użyciu statystyk oczekiwania w magazynie zapytań:

Obserwacji Akcja
Oczekiwanie na wysoką blokadę Sprawdź teksty zapytań pod kątem zapytań, których dotyczy problem, i zidentyfikuj jednostki docelowe. Poszukaj w magazynie zapytań pod kątem innych zapytań modyfikujących tę samą jednostkę, która jest wykonywana często i/lub ma wysoki czas trwania. Po zidentyfikowaniu tych zapytań rozważ zmianę logiki aplikacji w celu poprawy współbieżności lub użyj mniej restrykcyjnego poziomu izolacji.
Wysokie oczekiwania we/wy buforu Znajdź zapytania z dużą liczbą operacji odczytu fizycznego w magazynie zapytań. Jeśli pasują one do zapytań z dużymi oczekiwaniami we/wy, rozważ wprowadzenie indeksu w jednostce bazowej, aby wykonać wyszukiwanie zamiast skanowania. Zminimalizowałoby to obciążenie operacji we/wy zapytań. Sprawdź Rekomendacje wydajności serwera w portalu, aby sprawdzić, czy istnieją zalecenia dotyczące indeksu dla tego serwera, które zoptymalizują zapytania.
Oczekiwanie na wysoką ilość pamięci Znajdź zapytania zużywające najwięcej pamięci w magazynie zapytań. Te zapytania prawdopodobnie opóźniają dalszy postęp zapytań, których dotyczy problem. Sprawdź Rekomendacje wydajności serwera w portalu, aby sprawdzić, czy istnieją zalecenia dotyczące indeksów, które zoptymalizują te zapytania.

Opcje konfiguracji

Gdy magazyn zapytań jest włączony, zapisuje dane w 15-minutowych oknach agregacji, maksymalnie 500 odrębnych zapytań na okno.

Dostępne są następujące opcje konfigurowania parametrów magazynu zapytań.

Parametr Opis Wartość domyślna Zakres
pg_qs.query_capture_mode Zestawy, które instrukcje są śledzone. Brak brak, góra, wszystko
pg_qs.max_query_text_length Ustawia maksymalną długość zapytania, którą można zapisać. Dłuższe zapytania zostaną obcięte. 6000 100–10 000
pg_qs.retention_period_in_days Ustawia okres przechowywania. 7 1 - 30
pg_qs.track_utility Określa, czy polecenia narzędzia są śledzone on włączone, wyłączone

Poniższe opcje mają zastosowanie specjalnie do statystyk oczekiwania.

Parametr Opis Wartość domyślna Zakres
pgms_wait_sampling.query_capture_mode Ustawia, które instrukcje są śledzone pod kątem statystyk oczekiwania. Brak brak, wszystkie
Pgms_wait_sampling.history_period Ustaw częstotliwość w milisekundach, w których są próbkowane zdarzenia oczekiwania. 100 1-600000

Uwaga

pg_qs.query_capture_mode zastępuje pgms_wait_sampling.query_capture_mode. Jeśli pg_qs.query_capture_mode to NONE, ustawienie pgms_wait_sampling.query_capture_mode nie ma żadnego efektu.

Użyj witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure, aby uzyskać lub ustawić inną wartość parametru.

Widoki i funkcje

Wyświetlanie magazynu zapytań i zarządzanie nim przy użyciu następujących widoków i funkcji. Każda osoba w roli publicznej PostgreSQL może używać tych widoków do wyświetlenia danych w magazynie zapytań. Te widoki są dostępne tylko w bazie danych azure_sys .

Zapytania są znormalizowane przez przyjrzenie się ich strukturze po usunięciu literałów i stałych. Jeśli dwa zapytania są identyczne z wyjątkiem wartości literału, będą miały ten sam skrót.

query_store.qs_view

Ten widok zwraca dane tekstowe zapytania w magazynie zapytań. Istnieje jeden wiersz dla każdego odrębnego query_text. Dane nie są dostępne za pośrednictwem sekcji Inteligentnej wydajności w portalu, interfejsach API lub interfejsie wiersza polecenia — ale można je znaleźć, łącząc się z azure_sys i wykonując zapytanie "query_store.query_text_view".

Nazwa/nazwisko Type Dokumentacja Opis
runtime_stats_entry_id bigint Identyfikator z tabeli runtime_stats_entries
user_id Oid pg_authid.oid Identyfikator OID użytkownika, który wykonał instrukcję
Db_id Oid pg_database.oid Identyfikator OID bazy danych, w której wykonano instrukcję
query_id bigint Wewnętrzny kod skrótu obliczony z drzewa analizy instrukcji
query_sql_text Varchar(10000) Tekst oświadczenia przedstawiciela. Różne zapytania o tej samej strukturze są grupowane razem; ten tekst jest tekstem pierwszego zapytania w klastrze.
plan_id bigint Identyfikator planu odpowiadającego temu zapytaniu, który nie jest jeszcze dostępny
start_time timestamp Zapytania są agregowane według przedziałów czasu — przedział czasu domyślnie wynosi 15 minut. Jest to czas rozpoczęcia odpowiadający przedziałowi czasu dla tego wpisu.
end_time timestamp Godzina zakończenia odpowiadająca zasobnikowi czasu dla tego wpisu.
Wywołania bigint Liczba wykonanych zapytań
total_time podwójna precyzja Łączny czas wykonywania zapytania w milisekundach
min_time podwójna precyzja Minimalny czas wykonywania zapytania w milisekundach
max_time podwójna precyzja Maksymalny czas wykonywania zapytania w milisekundach
mean_time podwójna precyzja Średni czas wykonywania zapytania w milisekundach
stddev_time podwójna precyzja Odchylenie standardowe czasu wykonywania zapytania w milisekundach
wiersze bigint Łączna liczba wierszy pobranych lub dotkniętych instrukcją
shared_blks_hit bigint Łączna liczba trafień udostępnionej pamięci podręcznej bloków według instrukcji
shared_blks_read bigint Łączna liczba udostępnionych bloków odczytanych przez instrukcję
shared_blks_dirtied bigint Łączna liczba udostępnionych bloków brudnych przez instrukcję
shared_blks_written bigint Łączna liczba udostępnionych bloków zapisanych przez instrukcję
local_blks_hit bigint Łączna liczba trafień lokalnej pamięci podręcznej bloków według instrukcji
local_blks_read bigint Łączna liczba bloków lokalnych odczytanych przez instrukcję
local_blks_dirtied bigint Łączna liczba bloków lokalnych brudnych przez instrukcję
local_blks_written bigint Łączna liczba bloków lokalnych zapisanych przez instrukcję
temp_blks_read bigint Łączna liczba bloków tymczasowych odczytanych przez instrukcję
temp_blks_written bigint Łączna liczba bloków tymczasowych zapisanych przez instrukcję
blk_read_time podwójna precyzja Łączny czas spędzony na blokach odczytu instrukcji w milisekundach (jeśli track_io_timing jest włączona, w przeciwnym razie zero)
blk_write_time podwójna precyzja Łączny czas spędzony na zapisywaniu bloków instrukcji w milisekundach (jeśli track_io_timing jest włączona, w przeciwnym razie zero)

query_store.query_text_view

Ten widok zwraca dane tekstowe zapytania w magazynie zapytań. Istnieje jeden wiersz dla każdego odrębnego query_text.

Nazwa/nazwisko Typ Opis
query_text_id bigint Identyfikator tabeli query_texts
query_sql_text Varchar(10000) Tekst oświadczenia przedstawiciela. Różne zapytania o tej samej strukturze są grupowane razem; ten tekst jest tekstem pierwszego zapytania w klastrze.

query_store.pgms_wait_sampling_view

Ten widok zwraca dane tekstowe zapytania w magazynie zapytań. Istnieje jeden wiersz dla każdego odrębnego query_text. Dane nie są dostępne za pośrednictwem sekcji Inteligentnej wydajności w portalu, interfejsach API lub interfejsie wiersza polecenia — ale można je znaleźć, łącząc się z azure_sys i wykonując zapytanie "query_store.query_text_view".

Nazwa/nazwisko Type Dokumentacja Opis
user_id Oid pg_authid.oid Identyfikator OID użytkownika, który wykonał instrukcję
Db_id Oid pg_database.oid Identyfikator OID bazy danych, w której wykonano instrukcję
query_id bigint Wewnętrzny kod skrótu obliczony z drzewa analizy instrukcji
Event_type text Typ zdarzenia, dla którego zaplecze czeka
event text Nazwa zdarzenia oczekiwania, jeśli zaplecze oczekuje obecnie
Wywołania Integer Liczba przechwyconych zdarzeń

Funkcje

funkcja Query_store.qs_reset() zwraca wartość void

qs_reset odrzuca wszystkie statystyki zebrane do tej pory przez magazyn zapytań. Ta funkcja może być wykonywana tylko przez rolę administratora serwera.

funkcja Query_store.staging_data_reset() zwraca wartość void

staging_data_reset odrzuca wszystkie statystyki zebrane w pamięci przez magazyn zapytań (czyli dane w pamięci, które nie zostały jeszcze opróżnione do bazy danych). Ta funkcja może być wykonywana tylko przez rolę administratora serwera.

Azure Monitor

Usługa Azure Database for PostgreSQL jest zintegrowana z ustawieniami diagnostycznymi usługi Azure Monitor. Ustawienia diagnostyczne umożliwiają wysyłanie dzienników Postgres w formacie JSON do dzienników usługi Azure Monitor na potrzeby analizy i alertów, usługi Event Hubs do przesyłania strumieniowego i usługi Azure Storage na potrzeby archiwizowania.

Ważne

Ta funkcja diagnostyczna dla programu jest dostępna tylko w warstwach cenowych Ogólnego przeznaczenia i Zoptymalizowane pod kątem pamięci.

Konfigurowanie ustawień diagnostycznych

Ustawienia diagnostyczne serwera Postgres można włączyć przy użyciu witryny Azure Portal, interfejsu wiersza polecenia, interfejsu API REST i programu PowerShell. Kategorie dzienników do skonfigurowania to QueryStoreRuntimeStatistics i QueryStoreWaitStatistics.

Aby włączyć dzienniki zasobów przy użyciu witryny Azure Portal:

  1. W portalu przejdź do pozycji Diagnostyka Ustawienia w menu nawigacji serwera Postgres.
  2. Wybierz pozycję Dodaj ustawienie diagnostyczne.
  3. Nadaj temu ustawieniu nazwę.
  4. Wybierz preferowany punkt końcowy (konto magazynu, centrum zdarzeń, analiza dzienników).
  5. Wybierz typy dzienników QueryStoreRuntimeStatistics i QueryStoreWaitStatistics.
  6. Zapisz ustawienie.

Aby włączyć to ustawienie przy użyciu programu PowerShell, interfejsu wiersza polecenia lub interfejsu API REST, odwiedź artykuł ustawień diagnostycznych.

Format dziennika JSON

W poniższych tabelach opisano pola dla dwóch typów dzienników. W zależności od wybranego punktu końcowego danych wyjściowych pola uwzględnione i kolejność ich wyświetlania mogą się różnić.

QueryStoreRuntimeStatistics

Pole Opis
TimeGenerated [UTC] Sygnatura czasowa zarejestrowania dziennika w formacie UTC
ResourceId Identyfikator URI zasobu platformy Azure serwera Postgres
Kategoria QueryStoreRuntimeStatistics
OperationName QueryStoreRuntimeStatisticsEvent
LogicalServerName_s Nazwa serwera Postgres
runtime_stats_entry_id_s Identyfikator z tabeli runtime_stats_entries
user_id_s Identyfikator OID użytkownika, który wykonał instrukcję
db_id_s Identyfikator OID bazy danych, w której wykonano instrukcję
query_id_s Wewnętrzny kod skrótu obliczony z drzewa analizy instrukcji
end_time_s Godzina zakończenia odpowiadająca zasobnikowi czasu dla tego wpisu
calls_s Liczba wykonanych zapytań
total_time_s Łączny czas wykonywania zapytania w milisekundach
min_time_s Minimalny czas wykonywania zapytania w milisekundach
max_time_s Maksymalny czas wykonywania zapytania w milisekundach
mean_time_s Średni czas wykonywania zapytania w milisekundach
ResourceGroup Grupa zasobów
SubscriptionId Identyfikator Twojej subskrypcji
ResourceProvider Microsoft.DBForPostgreSQL
Zasób Nazwa serwera Postgres
ResourceType Servers

QueryStoreWaitStatistics

Pole Opis
TimeGenerated [UTC] Sygnatura czasowa zarejestrowania dziennika w formacie UTC
ResourceId Identyfikator URI zasobu platformy Azure serwera Postgres
Kategoria QueryStoreWaitStatistics
OperationName QueryStoreWaitEvent
user_id_s Identyfikator OID użytkownika, który wykonał instrukcję
db_id_s Identyfikator OID bazy danych, w której wykonano instrukcję
query_id_s Wewnętrzny kod skrótu zapytania
calls_s Liczba przechwyconych zdarzeń
event_type_s Typ zdarzenia, dla którego zaplecze czeka
event_s Nazwa zdarzenia oczekiwania, jeśli zaplecze oczekuje obecnie
start_time_t Godzina rozpoczęcia zdarzenia
end_time_s Godzina zakończenia zdarzenia
LogicalServerName_s Nazwa serwera Postgres
ResourceGroup Grupa zasobów
SubscriptionId Identyfikator Twojej subskrypcji
ResourceProvider Microsoft.DBForPostgreSQL
Zasób Nazwa serwera Postgres
ResourceType Servers

Ograniczenia i znane problemy

  • Jeśli serwer PostgreSQL ma parametr default_transaction_read_only, magazyn zapytań nie może przechwycić danych.
  • Funkcjonalność magazynu zapytań może zostać przerwana, jeśli napotka długie zapytania Unicode (>= 6000 bajtów).
  • Repliki do odczytu replikują dane magazynu zapytań z serwera podstawowego. Oznacza to, że magazyn zapytań repliki do odczytu nie zapewnia statystyk dotyczących zapytań uruchamianych w repliki do odczytu.

Następne kroki