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
- Zaloguj się do witryny Azure Portal i wybierz serwer usługi Azure Database for PostgreSQL.
- Wybierz pozycję Parametry serwera w sekcji Ustawienia menu.
pg_qs.query_capture_mode
Wyszukaj parametr .- Ustaw wartość na
TOP
i Zapisz.
Aby włączyć statystyki oczekiwania w magazynie zapytań:
pgms_wait_sampling.query_capture_mode
Wyszukaj parametr .- 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:
- W portalu przejdź do pozycji Diagnostyka Ustawienia w menu nawigacji serwera Postgres.
- Wybierz pozycję Dodaj ustawienie diagnostyczne.
- Nadaj temu ustawieniu nazwę.
- Wybierz preferowany punkt końcowy (konto magazynu, centrum zdarzeń, analiza dzienników).
- Wybierz typy dzienników QueryStoreRuntimeStatistics i QueryStoreWaitStatistics.
- 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
- Dowiedz się więcej o scenariuszach, w których magazyn zapytań może być szczególnie przydatny.
- Dowiedz się więcej o najlepszych rozwiązaniach dotyczących korzystania z magazynu zapytań.