Övervaka Prestanda för Azure Database for MySQL med Query Store

GÄLLER FÖR: Azure Database for MySQL – enskild server

Viktigt!

Azure Database for MySQL – enskild server är på väg att dras tillbaka. Vi rekommenderar starkt att du uppgraderar till en flexibel Azure Database for MySQL-server. Mer information om hur du migrerar till en flexibel Azure Database for MySQL-server finns i Vad händer med Azure Database for MySQL – enskild server?

Gäller för: Azure Database for MySQL 5.7, 8.0

Funktionen Query Store i Azure Database for MySQL ger ett sätt att spåra frågeprestanda över tid. Query Store förenklar prestandafelsökningen genom att hjälpa dig att snabbt hitta de längsta och mest resursintensiva frågorna. Query Store samlar automatiskt in en historik över frågor och körningsstatistik, och den behåller dem för din granskning. Den separerar data efter tidsfönster så att du kan se databasanvändningsmönster. Data för alla användare, databaser och frågor lagras i mysql-schemadatabasen i Azure Database for MySQL-instansen.

Vanliga scenarier för att använda Query Store

Frågearkiv kan användas i ett antal scenarier, inklusive följande:

  • Identifiera regresserade frågor
  • Fastställa hur många gånger en fråga kördes under ett angivet tidsfönster
  • Jämföra den genomsnittliga körningstiden för en fråga över tidsfönster för att se stora delta

Aktivera Query Store

Query Store är en opt-in-funktion, så den är inte aktiv som standard på en server. Frågearkivet är aktiverat eller inaktiverat globalt för alla databaser på en viss server och kan inte aktiveras eller inaktiveras per databas.

Aktivera Query Store med hjälp av Azure-portalen

  1. Logga in på Azure-portalen och välj din Azure Database for MySQL-server.
  2. Välj Serverparametrar i avsnittet Inställningar på menyn.
  3. Sök efter parametern query_store_capture_mode.
  4. Ange värdet till ALLA och Spara.

Så här aktiverar du väntestatistik i frågearkivet:

  1. Sök efter parametern query_store_wait_sampling_capture_mode.
  2. Ange värdet till ALLA och Spara.

Tillåt upp till 20 minuter för den första databatchen att sparas i mysql-databasen.

Information i Query Store

Query Store har två butiker:

  • Ett körningsstatistiklager för att bevara information om frågekörningsstatistik.
  • Ett väntestatistiklager för att spara information om väntestatistik.

För att minimera utrymmesanvändningen aggregeras körningsstatistiken i statistikarkivet för körning över ett fast, konfigurerbart tidsfönster. Informationen i dessa butiker visas genom att fråga frågearkivvyerna.

Följande fråga returnerar information om frågor i Query Store:

SELECT * FROM mysql.query_store;

Eller den här frågan för väntestatistik:

SELECT * FROM mysql.query_store_wait_stats;

Söka efter väntefrågor

Kommentar

Väntestatistik bör inte aktiveras under arbetsbelastningstoppar eller aktiveras på obestämd tid för känsliga arbetsbelastningar.
För arbetsbelastningar som körs med hög CPU-användning eller på servrar som konfigurerats med lägre virtuella kärnor bör du vara försiktig när du aktiverar väntestatistik. Den bör inte aktiveras på obestämd tid.

Väntehändelsetyper kombinerar olika väntehändelser i bucketar efter likhet. Query Store innehåller typen av väntehändelse, ett specifikt namn på väntehändelsen och frågan i fråga. Om du kan korrelera den här vänteinformationen med frågekörningsstatistiken kan du få en djupare förståelse för vad som bidrar till frågeprestandaegenskaper.

Här följer några exempel på hur du kan få mer insikter om din arbetsbelastning med hjälp av väntestatistiken i Query Store:

Observation Åtgärd
Väntetider med högt lås Kontrollera frågetexterna för de berörda frågorna och identifiera målentiteterna. Leta i Query Store efter andra frågor som ändrar samma entitet, som körs ofta och/eller har hög varaktighet. När du har identifierat dessa frågor kan du överväga att ändra programlogik för att förbättra samtidigheten eller använda en mindre restriktiv isoleringsnivå.
I/O-väntetider med hög buffert Hitta frågorna med ett stort antal fysiska läsningar i Query Store. Om de matchar frågorna med höga I/O-väntetider kan du överväga att införa ett index på den underliggande entiteten för att göra sökningar i stället för genomsökningar. Detta skulle minimera I/O-omkostnaderna för frågorna. Kontrollera prestanda Rekommendationer för servern i portalen för att se om det finns indexrekommendationer för den här servern som skulle optimera frågorna.
Väntetider med högt minne Hitta de vanligaste minneskrävande frågorna i Query Store. Dessa frågor fördröjer förmodligen ytterligare förlopp för de berörda frågorna. Kontrollera prestanda Rekommendationer för servern i portalen för att se om det finns indexrekommendationer som skulle optimera dessa frågor.

Konfigurationsalternativ

När Query Store är aktiverat sparar det data i 15-minuters aggregeringsfönster, upp till 500 distinkta frågor per fönster.

Följande alternativ är tillgängliga för att konfigurera Query Store-parametrar.

Parameter Beskrivning Standard Intervall
query_store_capture_mode Aktivera/inaktivera frågearkivfunktionen baserat på värdet. Obs! Om performance_schema är AV aktiveras query_store_capture_mode performance_schema och en delmängd av de prestandaschemainstrument som krävs för den här funktionen. ALL INGEN, ALLA
query_store_capture_interval Insamlingsintervallet för frågearkivet i minuter. Tillåter att du anger det intervall där frågemåtten aggregeras 15 5 - 60
query_store_capture_utility_queries Aktivera eller INAKTIVERA för att samla in alla verktygsfrågor som körs i systemet. NEJ JA, NEJ
query_store_retention_period_in_days Tidsfönster i dagar för att behålla data i frågelagret. 7 1 - 30

Följande alternativ gäller specifikt för väntestatistik.

Parameter Beskrivning Standard Intervall
query_store_wait_sampling_capture_mode Tillåter att väntestatistiken aktiveras/inaktiveras. INGET INGEN, ALLA
query_store_wait_sampling_frequency Ändrar väntesamplingsfrekvensen i sekunder. 5 till 300 sekunder. 30 5-300

Kommentar

För närvarande ersätter query_store_capture_mode den här konfigurationen, vilket innebär att både query_store_capture_mode och query_store_wait_sampling_capture_mode måste aktiveras till ALLA för att väntestatistiken ska fungera. Om query_store_capture_mode är inaktiverat inaktiveras även väntestatistik eftersom väntestatistik använder performance_schema aktiverat och query_text som samlas in av frågearkivet.

Använd Azure-portalen eller Azure CLI för att hämta eller ange ett annat värde för en parameter.

Vyer och funktioner

Visa och hantera Query Store med hjälp av följande vyer och funktioner. Vem som helst i den offentliga rollen select privilege kan använda dessa vyer för att se data i Query Store. Dessa vyer är endast tillgängliga i mysql-databasen .

Frågor normaliseras genom att titta på deras struktur när du har tagit bort literaler och konstanter. Om två frågor är identiska förutom literalvärden har de samma hash.

mysql.query_store

Den här vyn returnerar alla data i Query Store. Det finns en rad för varje distinkt databas-ID, användar-ID och fråge-ID.

Namn Datatyp IS_NULLABLE Beskrivning
schema_name varchar(64) NEJ Namnet på schemat
query_id bigint(20) NEJ Unikt ID som genereras för den specifika frågan, om samma fråga körs i ett annat schema genereras ett nytt ID
timestamp_id timestamp NEJ Tidsstämpel där frågan körs. Detta baseras på konfigurationen av query_store_interval
query_digest_text longtext NEJ Den normaliserade frågetexten när alla literaler har tagits bort
query_sample_text longtext NEJ Det första utseendet på den faktiska frågan med literaler
query_digest_truncated bit JA Om frågetexten har trunkerats. Värdet är Ja om frågan är längre än 1 KB
execution_count bigint(20) NEJ Antalet gånger frågan kördes för det här tidsstämpel-ID:t/under den konfigurerade intervallperioden
warning_count bigint(20) NEJ Antal varningar som den här frågan genererade under den interna
error_count bigint(20) NEJ Antal fel som den här frågan genererade under intervallet
sum_timer_wait dubbel JA Total körningstid för den här frågan under intervallet i millisekunder
avg_timer_wait dubbel JA Genomsnittlig körningstid för den här frågan under intervallet i millisekunder
min_timer_wait dubbel JA Minsta körningstid för den här frågan i millisekunder
max_timer_wait dubbel JA Maximal körningstid i millisekunder
sum_lock_time bigint(20) NEJ Total tid för alla lås för den här frågekörningen under det här tidsfönstret
sum_rows_affected bigint(20) NEJ Antal rader som påverkas
sum_rows_sent bigint(20) NEJ Antal rader som skickas till klienten
sum_rows_examined bigint(20) NEJ Antal undersökta rader
sum_select_full_join bigint(20) NEJ Antal fullständiga kopplingar
sum_select_scan bigint(20) NEJ Antal utvalda genomsökningar
sum_sort_rows bigint(20) NEJ Antal rader sorterade
sum_no_index_used bigint(20) NEJ Antal gånger då frågan inte använde några index
sum_no_good_index_used bigint(20) NEJ Antal gånger då frågekörningsmotorn inte använde några bra index
sum_created_tmp_tables bigint(20) NEJ Totalt antal temporära tabeller som skapats
sum_created_tmp_disk_tables bigint(20) NEJ Totalt antal temporära tabeller som skapats i disken (genererar I/O)
first_seen timestamp NEJ Den första förekomsten (UTC) av frågan under aggregeringsfönstret
last_seen timestamp NEJ Den sista förekomsten (UTC) av frågan under det här aggregeringsfönstret

mysql.query_store_wait_stats

Den här vyn returnerar väntehändelser i Query Store. Det finns en rad för varje distinkt databas-ID, användar-ID, fråge-ID och händelse.

Namn Datatyp IS_NULLABLE Beskrivning
interval_start timestamp NEJ Början av intervallet (15 minuters ökning)
interval_end timestamp NEJ Slutet av intervallet (15 minuters ökning)
query_id bigint(20) NEJ Genererat unikt ID för den normaliserade frågan (från frågearkivet)
query_digest_id varchar(32) NEJ Den normaliserade frågetexten när du har tagit bort alla literaler (från frågearkivet)
query_digest_text longtext NEJ Det första utseendet på den faktiska frågan med literaler (från frågearkivet)
event_type varchar(32) NEJ Kategori för väntehändelsen
event_name varchar(128) NEJ Namnet på väntehändelsen
count_star bigint(20) NEJ Antal väntehändelser som samplas under intervallet för frågan
sum_timer_wait_ms dubbel NEJ Total väntetid (i millisekunder) för den här frågan under intervallet

Funktioner

Namn Beskrivning
mysql.az_purge_querystore_data(TIMESTAMP) Rensar alla frågelagerdata före den angivna tidsstämpeln
mysql.az_procedure_purge_querystore_event(TIMESTAMP) Rensar alla väntehändelsedata före den angivna tidsstämpeln
mysql.az_procedure_purge_recommendation(TIMESTAMP) Rensar rekommendationer vars förfallodatum är före den angivna tidsstämpeln

Begränsningar och kända problem

  • Om en MySQL-server har parametern read_only på kan inte Query Store samla in data.
  • Funktionen Query Store kan avbrytas om den stöter på långa Unicode-frågor (>= 6 000 byte).
  • Kvarhållningsperioden för väntestatistik är 24 timmar.
  • Väntestatistik använder exempel för att samla in en bråkdel av händelserna. Frekvensen kan ändras med parametern query_store_wait_sampling_frequency.

Nästa steg