Monitorování výkonu služby Azure Database for MySQL pomocí úložiště dotazů

PLATÍ PRO: Jednoúčelový server Azure Database for MySQL

Důležité

Jednoúčelový server Azure Database for MySQL je na cestě vyřazení. Důrazně doporučujeme upgradovat na flexibilní server Azure Database for MySQL. Další informace o migraci na flexibilní server Azure Database for MySQL najdete v tématu Co se děje s jednoúčelovým serverem Azure Database for MySQL?

Platí pro: Azure Database for MySQL 5.7, 8.0

Funkce Úložiště dotazů ve službě Azure Database for MySQL poskytuje způsob, jak sledovat výkon dotazů v průběhu času. Úložiště dotazů zjednodušuje řešení potíží s výkonem tím, že vám pomůže rychle najít nejdéle běžící a nejvýkonnější dotazy náročné na prostředky. Úložiště dotazů automaticky zaznamenává historii dotazů a statistik modulu runtime a uchovává je pro vaši kontrolu. Odděluje data časovými intervaly, abyste viděli vzory využití databáze. Data pro všechny uživatele, databáze a dotazy se ukládají v databázi schématu mysql v instanci Azure Database for MySQL.

Běžné scénáře použití úložiště dotazů

Úložiště dotazů je možné použít v řadě scénářů, včetně následujících:

  • Zjišťování dotazů s nižším přenosem dat
  • Určení počtu spuštění dotazu v daném časovém intervalu
  • Porovnání průměrné doby provádění dotazu v časových oknech a zobrazení velkých rozdílů

Povolení úložiště dotazů

Úložiště dotazů je funkce výslovného souhlasu, takže na serveru není ve výchozím nastavení aktivní. Úložiště dotazů je povolené nebo zakázané globálně pro všechny databáze na daném serveru a není možné ho zapnout nebo vypnout pro každou databázi.

Povolení úložiště dotazů pomocí webu Azure Portal

  1. Přihlaste se k webu Azure Portal a vyberte server Azure Database for MySQL.
  2. V Nastavení části nabídky vyberte Parametry serveru.
  3. Vyhledejte parametr query_store_capture_mode.
  4. Nastavte hodnotu NA ALL a Uložit.

Povolení statistik čekání v úložišti dotazů:

  1. Vyhledejte parametr query_store_wait_sampling_capture_mode.
  2. Nastavte hodnotu NA ALL a Uložit.

Počkejte až 20 minut, než se první dávka dat bude uchovávat v databázi mysql.

Informace v úložišti dotazů

Úložiště dotazů má dvě úložiště:

  • Úložiště statistik modulu runtime pro zachování informací o statistikách provádění dotazu.
  • Úložiště statistik čekání pro zachování informací o statistikách čekání.

Aby se minimalizovalo využití místa, statistiky spouštění modulu runtime v úložišti statistik modulu runtime se agregují v pevném konfigurovatelném časovém intervalu. Informace v těchto úložištích jsou viditelné dotazováním zobrazení úložiště dotazů.

Následující dotaz vrátí informace o dotazech v úložišti dotazů:

SELECT * FROM mysql.query_store;

Nebo tento dotaz na statistiku čekání:

SELECT * FROM mysql.query_store_wait_stats;

Hledání dotazů čekání

Poznámka:

Statistiky čekání by neměly být povoleny během špičky nebo je u citlivých úloh po neomezenou dobu zapnuté.
U úloh, které běží s vysokým využitím procesoru nebo na serverech nakonfigurovaných s nižšími virtuálními jádry, při povolování statistik čekání buďte opatrní. Neměl by být zapnutý na neomezenou dobu.

Typy událostí čekání kombinují různé události čekání do kontejnerů podle podobnosti. Úložiště dotazů poskytuje typ události čekání, konkrétní název události čekání a dotaz, který se týká. Schopnost korelovat tyto informace o čekání se statistikami modulu runtime dotazu znamená, že získáte hlubší přehled o tom, co přispívá k charakteristikám výkonu dotazů.

Tady je několik příkladů, jak můžete získat další přehled o úlohách pomocí statistik čekání v úložišti dotazů:

Pozorování Akce
Vysoké čekání zámků Zkontrolujte texty dotazů pro ovlivněné dotazy a identifikujte cílové entity. Vyhledejte v úložišti dotazů další dotazy, které upravují stejnou entitu, která se provádí často nebo mají vysokou dobu trvání. Po identifikaci těchto dotazů zvažte změnu logiky aplikace, aby se zlepšila souběžnost, nebo použijte méně omezující úroveň izolace.
Čekání vstupně-výstupních operací s vysokou vyrovnávací pamětí Vyhledejte dotazy s velkým počtem fyzických čtení v úložišti dotazů. Pokud odpovídají dotazům s vysokými vstupně-výstupními čekáními, zvažte zavedení indexu u podkladové entity, aby se místo prohledávání hledaly. Tím se minimalizují režijní náklady na vstupně-výstupní operace dotazů. Zkontrolujte doporučení k výkonu serveru na portálu a zjistěte, jestli pro tento server existují doporučení indexu, která by optimalizovala dotazy.
Čekání s vysokým využitím paměti Vyhledejte dotazy s nejvyšším využitím paměti v úložišti dotazů. Tyto dotazy pravděpodobně zpozdí další průběh ovlivněných dotazů. Zkontrolujte doporučení k výkonu pro váš server na portálu a zjistěte, jestli existují doporučení indexu, která by tyto dotazy optimalizovala.

Možnosti konfigurace

Když je úložiště dotazů povolené, ukládá data v 15minutových oknech agregace až 500 jedinečných dotazů na okno.

Pro konfiguraci parametrů úložiště dotazů jsou k dispozici následující možnosti.

Parametr Popis Výchozí Rozsah
query_store_capture_mode Na základě hodnoty zapněte nebo vypněte funkci úložiště dotazů. Poznámka: Pokud je performance_schema vypnuto, zapnutí query_store_capture_mode zapne performance_schema a podmnožinu nástrojů schématu výkonu vyžadovaných pro tuto funkci. ALL NONE, ALL
query_store_capture_interval Interval zachytávání úložiště dotazů v minutách. Umožňuje zadat interval, ve kterém se agregují metriky dotazů. 15 5 - 60
query_store_capture_utility_queries Zapnutím nebo vypnutím zachytíte všechny dotazy nástroje, které se v systému spouští. NE ANO, NE
query_store_retention_period_in_days Časové intervaly ve dnech pro uchovávání dat v úložišti dotazů. 7 1 - 30

Následující možnosti se vztahují konkrétně na statistiky čekání.

Parametr Popis Výchozí Rozsah
query_store_wait_sampling_capture_mode Umožňuje zapnout nebo vypnout statistiky čekání. ŽÁDNÝ NONE, ALL
query_store_wait_sampling_frequency Mění frekvenci vzorkování čekání v sekundách. 5 až 300 sekund. 30 5-300

Poznámka:

V současné době query_store_capture_mode nahrazuje tuto konfiguraci, což znamená , že query_store_capture_mode i query_store_wait_sampling_capture_mode musí být povoleny všem, aby statistiky čekání fungovaly. Pokud je query_store_capture_mode vypnutá, statistiky čekání se vypnou i od doby, kdy statistika čekání využívá povolené performance_schema a query_text zachycené úložištěm dotazů.

K získání nebo nastavení jiné hodnoty parametru použijte Azure Portal nebo Azure CLI .

Zobrazení a funkce

K zobrazení a správě úložiště dotazů použijte následující zobrazení a funkce. Tato zobrazení můžou zobrazit v úložišti dotazů kdokoli z veřejné role s vybranými oprávněními . Tato zobrazení jsou k dispozici pouze v databázi mysql .

Dotazy jsou normalizovány zobrazením jejich struktury po odebrání literálů a konstant. Pokud jsou dva dotazy s výjimkou hodnot literálů stejné, budou mít stejnou hodnotu hash.

mysql.query_store

Toto zobrazení vrátí všechna data v úložišti dotazů. Pro každé jedinečné ID databáze, ID uživatele a ID dotazu je jeden řádek.

Název Datový typ IS_NULLABLE Popis
schema_name varchar(64) NE Název schématu
query_id bigint(20) NE Jedinečné ID vygenerované pro konkrétní dotaz, pokud se stejný dotaz spustí v jiném schématu, vygeneruje se nové ID.
timestamp_id časové razítko NE Časové razítko, ve kterém se dotaz spouští. Vychází z konfigurace query_store_interval.
query_digest_text longtext NE Normalizovaný text dotazu po odebrání všech literálů
query_sample_text longtext NE První vzhled skutečného dotazu s literály
query_digest_truncated bitové ANO Zda byl text dotazu zkrácen. Hodnota bude Ano, pokud je dotaz delší než 1 kB.
execution_count bigint(20) NE Počet spuštění dotazu pro toto ID časového razítka / během nakonfigurovaného intervalu
warning_count bigint(20) NE Počet upozornění, která tento dotaz vygeneroval během interního
error_count bigint(20) NE Počet chyb, které tento dotaz vygeneroval během intervalu
sum_timer_wait double ANO Celková doba provádění tohoto dotazu během intervalu v milisekundách
avg_timer_wait double ANO Průměrná doba provádění tohoto dotazu během intervalu v milisekundách
min_timer_wait double ANO Minimální doba provádění tohoto dotazu v milisekundách
max_timer_wait double ANO Maximální doba provádění v milisekundách
sum_lock_time bigint(20) NE Celková doba strávená pro všechny zámky provádění tohoto dotazu během tohoto časového intervalu
sum_rows_affected bigint(20) NE Počet ovlivněných řádků
sum_rows_sent bigint(20) NE Počet řádků odeslaných klientovi
sum_rows_examined bigint(20) NE Počet vyšetřených řádků
sum_select_full_join bigint(20) NE Počet úplných spojení
sum_select_scan bigint(20) NE Počet vybraných kontrol
sum_sort_rows bigint(20) NE Počet seřazených řádků
sum_no_index_used bigint(20) NE Kolikrát dotaz nepoužil žádné indexy
sum_no_good_index_used bigint(20) NE Počet, kdy prováděcí modul dotazů nepoužil žádné dobré indexy
sum_created_tmp_tables bigint(20) NE Celkový počet vytvořených dočasných tabulek
sum_created_tmp_disk_tables bigint(20) NE Celkový počet dočasných tabulek vytvořených na disku (generuje vstupně-výstupní operace)
first_seen časové razítko NE První výskyt dotazu (UTC) během okna agregace
last_seen časové razítko NE Poslední výskyt dotazu během tohoto okna agregace

mysql.query_store_wait_stats

Toto zobrazení vrátí data událostí čekání v úložišti dotazů. Pro každé jedinečné ID databáze, ID uživatele, ID dotazu a událost existuje jeden řádek.

Název Datový typ IS_NULLABLE Popis
interval_start časové razítko NE Začátek intervalu (15minutový přírůstek)
interval_end časové razítko NE Konec intervalu (15minutový přírůstek)
query_id bigint(20) NE Vygenerované jedinečné ID normalizovaného dotazu (z úložiště dotazů)
query_digest_id varchar(32) NE Normalizovaný text dotazu po odebrání všech literálů (z úložiště dotazů)
query_digest_text longtext NE První vzhled skutečného dotazu s literály (z úložiště dotazů)
event_type varchar(32) NE Kategorie události čekání
event_name varchar(128) NE Název události čekání
count_star bigint(20) NE Počet událostí čekání vzorkovaných během intervalu dotazu
sum_timer_wait_ms double NE Celková doba čekání (v milisekundách) tohoto dotazu během intervalu

Funkce

Název Popis
mysql.az_purge_querystore_data(TIMESTAMP) Vyprázdní všechna data úložiště dotazů před daným časovým razítkem.
mysql.az_procedure_purge_querystore_event(TIMESTAMP) Vyprázdní všechna data události čekání před daným časovým razítkem.
mysql.az_procedure_purge_recommendation(TIMESTAMP) Vyprázdnění doporučení, jejichž vypršení platnosti předchází danému časovému razítku

Omezení a známé problémy

  • Pokud má server MySQL parametr read_only zapnutý, úložiště dotazů nemůže zachytit data.
  • Funkce úložiště dotazů může být přerušena, pokud narazí na dlouhé dotazy Unicode (>= 6 000 bajtů).
  • Doba uchovávání statistik čekání je 24 hodin.
  • Statistika čekání používá ukázku k zachycení zlomku událostí. Frekvenci lze upravit pomocí parametru query_store_wait_sampling_frequency.

Další kroky