Monitorowanie wydajności usługi Azure Database for MySQL za pomocą magazynu zapytań

DOTYCZY: Azure Database for MySQL — pojedynczy serwer

Ważne

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

Dotyczy: Azure Database for MySQL 5.7, 8.0

Funkcja magazynu zapytań w usłudze Azure Database for MySQL 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 schematu mysql w wystąpieniu usługi Azure Database for MySQL.

Typowe scenariusze korzystania z magazynu zapytań

Magazyn zapytań może być używany w wielu scenariuszach, w tym w następujących scenariuszach:

  • Wykrywanie zapytań, których regresja
  • 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

Włączanie magazynu zapytań

Magazyn zapytań jest funkcją zgody, więc nie jest domyślnie aktywna na serwerze. Magazyn zapytań 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 MySQL.
  2. Wybierz pozycję Parametry serwera w sekcji Ustawienia menu.
  3. Wyszukaj parametr query_store_capture_mode.
  4. Ustaw wartość na ALL (WSZYSTKIE) i Save (Zapisz).

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

  1. Wyszukaj parametr query_store_wait_sampling_capture_mode.
  2. Ustaw wartość na ALL (WSZYSTKIE) i Save (Zapisz).

Poczekaj do 20 minut, aż pierwsza partia danych będzie utrwalana w bazie danych mysql.

Informacje w magazynie zapytań

Magazyn zapytań ma dwa magazyny:

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

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ń.

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

SELECT * FROM mysql.query_store;

Lub to zapytanie dotyczące statystyk oczekiwania:

SELECT * FROM mysql.query_store_wait_stats;

Znajdowanie zapytań oczekiwania

Uwaga

Statystyki oczekiwania nie powinny być włączone w godzinach szczytu obciążenia lub być włączone przez czas nieokreślony dla wrażliwych obciążeń.
W przypadku obciążeń z wysokim użyciem procesora CPU lub na serwerach skonfigurowanych z niższymi rdzeniami wirtualnymi należy zachować ostrożność podczas włączania statystyk oczekiwania. Nie należy włączać go na czas nieokreślony.

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 do bazowej jednostki, 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
query_store_capture_mode Włącz/WYŁĄCZ funkcję magazynu zapytań na podstawie wartości. Uwaga: jeśli performance_schema jest wyłączona, włączenie query_store_capture_mode spowoduje włączenie performance_schema i podzbioru instrumentów schematu wydajności wymaganych dla tej funkcji. ALL BRAK, WSZYSTKIE
query_store_capture_interval Interwał przechwytywania magazynu zapytań w minutach. Umożliwia określenie interwału, w którym metryki zapytania są agregowane 15 5 - 60
query_store_capture_utility_queries Włączenie lub wyłączenie w celu przechwycenia wszystkich zapytań narzędzi wykonywanych w systemie. NIE TAK, NIE
query_store_retention_period_in_days Przedział czasu w dniach przechowywania danych w magazynie zapytań. 7 1 - 30

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

Parametr Opis Wartość domyślna Zakres
query_store_wait_sampling_capture_mode Umożliwia włączenie/wyłączenie statystyk oczekiwania. BRAK BRAK, WSZYSTKIE
query_store_wait_sampling_frequency Zmienia częstotliwość próbkowania oczekiwania w sekundach. Od 5 do 300 sekund. 30 5-300

Uwaga

Obecnie query_store_capture_mode zastępuje tę konfigurację, co oznacza, że zarówno query_store_capture_mode , jak i query_store_wait_sampling_capture_mode muszą być włączone do wszystkich, aby statystyki oczekiwania działały. Jeśli query_store_capture_mode jest wyłączona, statystyki oczekiwania są wyłączone, ponieważ statystyki oczekiwania wykorzystują performance_schema włączone, a query_text przechwycone przez magazyn zapytań.

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 wybranej roli publicznej uprawnień może użyć tych widoków, aby wyświetlić dane w magazynie zapytań. Te widoki są dostępne tylko w bazie danych mysql .

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.

mysql.query_store

Ten widok zwraca wszystkie dane w magazynie zapytań. Istnieje jeden wiersz dla każdego unikatowego identyfikatora bazy danych, identyfikatora użytkownika i identyfikatora zapytania.

Nazwa/nazwisko Typ danych IS_NULLABLE Opis
schema_name varchar(64) NIE Nazwa schematu
query_id bigint(20) NIE Unikatowy identyfikator wygenerowany dla określonego zapytania, jeśli to samo zapytanie jest wykonywane w innym schemacie, zostanie wygenerowany nowy identyfikator
timestamp_id timestamp NIE Sygnatura czasowa, w której jest wykonywane zapytanie. Jest to oparte na konfiguracji query_store_interval
query_digest_text Longtext NIE Znormalizowany tekst zapytania po usunięciu wszystkich literałów
query_sample_text Longtext NIE Pierwszy wygląd rzeczywistego zapytania z literałami
query_digest_truncated bitowe TAK Czy tekst zapytania został obcięty. Wartość będzie mieć wartość Tak, jeśli zapytanie jest dłuższe niż 1 KB
execution_count bigint(20) NIE Liczba wykonanych zapytań dla tego identyfikatora sygnatury czasowej / w skonfigurowanym okresie interwału
warning_count bigint(20) NIE Liczba ostrzeżeń wygenerowanych przez to zapytanie podczas wewnętrznego
error_count bigint(20) NIE Liczba błędów generowanych przez to zapytanie w interwale
sum_timer_wait double TAK Całkowity czas wykonywania tego zapytania w interwale w milisekundach
avg_timer_wait double TAK Średni czas wykonywania dla tego zapytania w interwale w milisekundach
min_timer_wait double TAK Minimalny czas wykonywania dla tego zapytania w milisekundach
max_timer_wait double TAK Maksymalny czas wykonywania w milisekundach
sum_lock_time bigint(20) NIE Łączna ilość czasu spędzonego dla wszystkich blokad dla tego wykonania zapytania w tym przedziale czasu
sum_rows_affected bigint(20) NIE Liczba wierszy, których dotyczy problem
sum_rows_sent bigint(20) NIE Liczba wierszy wysłanych do klienta
sum_rows_examined bigint(20) NIE Liczba zbadanych wierszy
sum_select_full_join bigint(20) NIE Liczba pełnych sprzężeń
sum_select_scan bigint(20) NIE Liczba wybranych skanowań
sum_sort_rows bigint(20) NIE Liczba wierszy posortowanych
sum_no_index_used bigint(20) NIE Liczba przypadków, gdy zapytanie nie używało żadnych indeksów
sum_no_good_index_used bigint(20) NIE Liczba przypadków, gdy aparat wykonywania zapytań nie używał żadnych dobrych indeksów
sum_created_tmp_tables bigint(20) NIE Łączna liczba utworzonych tabel tymczasowych
sum_created_tmp_disk_tables bigint(20) NIE Łączna liczba tabel tymczasowych utworzonych na dysku (generuje operacje we/wy)
first_seen timestamp NIE Pierwsze wystąpienie (UTC) zapytania w oknie agregacji
last_seen timestamp NIE Ostatnie wystąpienie (UTC) zapytania w tym oknie agregacji

mysql.query_store_wait_stats

Ten widok zwraca dane zdarzeń oczekiwania w magazynie zapytań. Istnieje jeden wiersz dla każdego unikatowego identyfikatora bazy danych, identyfikatora użytkownika, identyfikatora zapytania i zdarzenia.

Nazwa/nazwisko Typ danych IS_NULLABLE Opis
interval_start timestamp NIE Początek interwału (przyrost 15 minut)
interval_end timestamp NIE Koniec interwału (15-minutowy przyrost)
query_id bigint(20) NIE Wygenerowany unikatowy identyfikator znormalizowanego zapytania (z magazynu zapytań)
query_digest_id varchar(32) NIE Znormalizowany tekst zapytania po usunięciu wszystkich literałów (z magazynu zapytań)
query_digest_text Longtext NIE Pierwszy wygląd rzeczywistego zapytania z literałami (z magazynu zapytań)
event_type varchar(32) NIE Kategoria zdarzenia oczekiwania
event_name varchar(128) NIE Nazwa zdarzenia oczekiwania
count_star bigint(20) NIE Liczba zdarzeń oczekiwania próbkowanych w interwale zapytania
sum_timer_wait_ms double NIE Łączny czas oczekiwania (w milisekundach) tego zapytania w interwale

Funkcje

Nazwa/nazwisko Opis
mysql.az_purge_querystore_data(TIMESTAMP) Przeczyszcza wszystkie dane magazynu zapytań przed danym sygnaturą czasową
mysql.az_procedure_purge_querystore_event(TIMESTAMP) Przeczyszcza wszystkie dane zdarzeń oczekiwania przed daną sygnaturą czasową
mysql.az_procedure_purge_recommendation(TIMESTAMP) Czyści zalecenia, których wygaśnięcie jest przed daną sygnaturą czasową

Ograniczenia i znane problemy

  • Jeśli na serwerze MySQL jest włączony parametr 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).
  • Okres przechowywania statystyk oczekiwania wynosi 24 godziny.
  • Statystyki oczekiwania używają przykładu do przechwytywania części zdarzeń. Częstotliwość można modyfikować przy użyciu parametru query_store_wait_sampling_frequency.

Następne kroki