Ö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
- Logga in på Azure-portalen och välj din Azure Database for MySQL-server.
- Välj Serverparametrar i avsnittet Inställningar på menyn.
- Sök efter parametern query_store_capture_mode.
- Ange värdet till ALLA och Spara.
Så här aktiverar du väntestatistik i frågearkivet:
- Sök efter parametern query_store_wait_sampling_capture_mode.
- 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 prestandarekommendationerna 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 prestandarekommendationerna 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
- Läs mer om Query Performance Insights