Prestaties van Azure Database for MySQL bewaken met Query Store

VAN TOEPASSING OP: Azure Database for MySQL - enkele server

Belangrijk

Azure Database for MySQL enkele server bevindt zich op het buitengebruikstellingspad. We raden u ten zeerste aan een upgrade uit te voeren naar een flexibele Azure Database for MySQL-server. Zie Wat gebeurt er met Azure Database for MySQL Enkele server voor meer informatie over migreren naar Azure Database for MySQL Flexibele server ?

Van toepassing op: Azure Database for MySQL 5.7, 8.0

De functie Query Store in Azure Database for MySQL biedt een manier om queryprestaties in de loop van de tijd bij te houden. Query Store vereenvoudigt het oplossen van problemen met prestaties, omdat u snel de langstlopende en meest tijdrovende query's kunt vinden. Query Store legt automatisch een geschiedenis van query's en runtimestatistieken vast en behoudt deze voor uw beoordeling. Hiermee worden gegevens gescheiden door tijdvensters, zodat u databasegebruikspatronen kunt zien. Gegevens voor alle gebruikers, databases en query's worden opgeslagen in de mysql-schemadatabase in het Azure Database for MySQL-exemplaar.

Algemene scenario's voor het gebruik van Query Store

Query store kan worden gebruikt in een aantal scenario's, waaronder de volgende:

  • Teruggedraaide query's detecteren
  • Bepalen hoe vaak een query is uitgevoerd in een bepaald tijdvenster
  • De gemiddelde uitvoeringstijd van een query in tijdvensters vergelijken met grote verschillen

Query Store inschakelen

Query Store is een opt-in-functie, dus deze is niet standaard actief op een server. Het queryarchief is globaal ingeschakeld of uitgeschakeld voor alle databases op een bepaalde server en kan niet per database worden ingeschakeld of uitgeschakeld.

Query Store inschakelen met behulp van Azure Portal

  1. Meld u aan bij Azure Portal en selecteer uw Azure Database for MySQL-server.
  2. Selecteer Serverparameters in de sectie Instellingen van het menu.
  3. Zoek de parameter query_store_capture_mode.
  4. Stel de waarde in op ALL en Save.

Wachtstatistieken inschakelen in uw Query Store:

  1. Zoek de parameter query_store_wait_sampling_capture_mode.
  2. Stel de waarde in op ALL en Save.

Het duurt maximaal 20 minuten voordat de eerste batch met gegevens in de mysql-database wordt bewaard.

Informatie in Query Store

Query Store heeft twee winkels:

  • Een runtimestatistiekenarchief voor het persistent maken van de gegevens over queryuitvoeringsstatistieken.
  • Een wachtstatistiekenarchief voor persistente informatie over wachtstatistieken.

Om het gebruik van ruimte te minimaliseren, worden de uitvoeringsstatistieken van runtime in het archief met runtimestatistieken geaggregeerd in een vast, configureerbaar tijdvenster. De informatie in deze winkels is zichtbaar door een query uit te voeren op de querystoreweergaven.

De volgende query retourneert informatie over query's in Query Store:

SELECT * FROM mysql.query_store;

Of deze query voor wachtstatistieken:

SELECT * FROM mysql.query_store_wait_stats;

Wachtende query's zoeken

Notitie

Wachtstatistieken mogen niet worden ingeschakeld tijdens piekuren van werkbelastingen of voor onbepaalde tijd worden ingeschakeld voor gevoelige workloads.
Voor workloads die worden uitgevoerd met een hoog CPU-gebruik of op servers die zijn geconfigureerd met lagere vCores, moet u voorzichtig zijn bij het inschakelen van wachtstatistieken. Het mag niet voor onbepaalde tijd worden ingeschakeld.

Wachtgebeurtenissen combineren verschillende wachtgebeurtenissen in buckets op gelijkenis. Query Store biedt het wacht-gebeurtenistype, de specifieke naam van de wacht gebeurtenis en de betreffende query. Als u deze wachtinformatie kunt correleren met de statistieken van de queryruntime, krijgt u meer inzicht in wat bijdraagt aan de prestatiekenmerken van query's.

Hier volgen enkele voorbeelden van hoe u meer inzicht krijgt in uw workload met behulp van de wachtstatistieken in Query Store:

Observatie Actie
Hoge vergrendelingswachttijden Controleer de queryteksten voor de betrokken query's en identificeer de doelentiteiten. Zoek in Query Store naar andere query's die dezelfde entiteit wijzigen, die regelmatig wordt uitgevoerd en/of een hoge duur hebben. Nadat u deze query's hebt geïdentificeerd, kunt u overwegen de toepassingslogica te wijzigen om gelijktijdigheid te verbeteren of een minder beperkend isolatieniveau te gebruiken.
IO-wachttijden met hoge buffer Zoek de query's met een groot aantal fysieke leesbewerkingen in Query Store. Als ze overeenkomen met de query's met hoge I/O-wachttijden, kunt u overwegen om een index op de onderliggende entiteit te introduceren om te zoeken in plaats van scans. Hierdoor wordt de IO-overhead van de query's geminimaliseerd. Controleer de prestatie-Aanbevelingen voor uw server in de portal om te zien of er indexaankopen zijn voor deze server waarmee de query's worden geoptimaliseerd.
Wachttijden met hoog geheugen Zoek de query's die het meest veel geheugen verbruiken in Query Store. Deze query's vertragen waarschijnlijk verdere voortgang van de betrokken query's. Controleer de prestatie-Aanbevelingen voor uw server in de portal om te zien of er indexaankopen zijn die deze query's zouden optimaliseren.

Configuratieopties

Wanneer Query Store is ingeschakeld, worden gegevens opgeslagen in aggregatievensters van 15 minuten, maximaal 500 afzonderlijke query's per venster.

De volgende opties zijn beschikbaar voor het configureren van Query Store-parameters.

Parameter Beschrijving Standaard Bereik
query_store_capture_mode Schakel de functie Query Store IN/UIT op basis van de waarde. Opmerking: als performance_schema is uitgeschakeld, schakelt u query_store_capture_mode performance_schema in en een subset van prestatieschema-instrumenten die voor deze functie zijn vereist. ALL GEEN, ALLE
query_store_capture_interval Het opname-interval van het queryarchief in minuten. Hiermee kunt u het interval opgeven waarin de metrische querygegevens worden geaggregeerd 15 5 - 60
query_store_capture_utility_queries In- of uitschakelen om alle hulpprogrammaquery's vast te leggen die in het systeem worden uitgevoerd. NO JA, NEE
query_store_retention_period_in_days Tijdvenster in dagen om de gegevens in het queryarchief te bewaren. 7 1 - 30

De volgende opties zijn specifiek van toepassing op wachtstatistieken.

Parameter Beschrijving Standaard Bereik
query_store_wait_sampling_capture_mode Hiermee staat u het in- of uitschakelen van de wachtstatistieken toe. GEEN GEEN, ALLE
query_store_wait_sampling_frequency Wijzigt de frequentie van wachtsampling in seconden. 5 tot 300 seconden. 30 5-300

Notitie

Momenteel vervangt query_store_capture_mode deze configuratie, wat betekent dat zowel query_store_capture_mode als query_store_wait_sampling_capture_mode moeten worden ingeschakeld voor ALL voor wachtstatistieken om te kunnen werken. Als query_store_capture_mode is uitgeschakeld, worden wachtstatistieken ook uitgeschakeld omdat wachtstatistieken gebruikmaken van de performance_schema ingeschakeld en de query_text vastgelegd door querystore.

Gebruik Azure Portal of Azure CLI om een andere waarde voor een parameter op te halen of in te stellen.

Weergaven en functies

Query Store weergeven en beheren met behulp van de volgende weergaven en functies. Iedereen in de openbare rol voor bepaalde bevoegdheden kan deze weergaven gebruiken om de gegevens in Query Store te bekijken. Deze weergaven zijn alleen beschikbaar in de mysql-database .

Query's worden genormaliseerd door de structuur te bekijken na het verwijderen van letterlijke en constanten. Als twee query's identiek zijn, met uitzondering van letterlijke waarden, hebben ze dezelfde hash.

mysql.query_store

Deze weergave retourneert alle gegevens in Query Store. Er is één rij voor elke afzonderlijke database-id, gebruikers-id en query-id.

Naam Gegevenstype IS_NULLABLE Beschrijving
schema_name varchar(64) NO Naam van het schema
query_id bigint(20) NO Unieke id gegenereerd voor de specifieke query, als dezelfde query wordt uitgevoerd in een ander schema, wordt er een nieuwe id gegenereerd
timestamp_id timestamp NO Tijdstempel waarin de query wordt uitgevoerd. Dit is gebaseerd op de query_store_interval-configuratie
query_digest_text Longtext NO De genormaliseerde querytekst na het verwijderen van alle letterlijke gegevens
query_sample_text Longtext NO Eerste weergave van de werkelijke query met letterlijke waarden
query_digest_truncated bit JA Of de querytekst is afgekapt. De waarde is Ja als de query langer is dan 1 kB
execution_count bigint(20) NO Het aantal keren dat de query is uitgevoerd voor deze tijdstempel-id / tijdens de geconfigureerde intervalperiode
warning_count bigint(20) NO Aantal waarschuwingen dat deze query tijdens de interne query is gegenereerd
error_count bigint(20) NO Aantal fouten dat deze query heeft gegenereerd tijdens het interval
sum_timer_wait dubbel JA Totale uitvoeringstijd van deze query tijdens het interval in milliseconden
avg_timer_wait dubbel JA Gemiddelde uitvoeringstijd voor deze query tijdens het interval in milliseconden
min_timer_wait dubbel JA Minimale uitvoeringstijd voor deze query in milliseconden
max_timer_wait dubbel JA Maximale uitvoeringstijd in milliseconden
sum_lock_time bigint(20) NO Totale hoeveelheid tijd besteed aan alle vergrendelingen voor deze queryuitvoering tijdens dit tijdvenster
sum_rows_affected bigint(20) NO Het aantal rijen dat is beïnvloed
sum_rows_sent bigint(20) NO Aantal rijen dat naar de client is verzonden
sum_rows_examined bigint(20) NO Aantal onderzochte rijen
sum_select_full_join bigint(20) NO Aantal volledige joins
sum_select_scan bigint(20) NO Aantal selectiescans
sum_sort_rows bigint(20) NO Aantal rijen gesorteerd
sum_no_index_used bigint(20) NO Aantal keren dat de query geen indexen heeft gebruikt
sum_no_good_index_used bigint(20) NO Aantal keren dat de engine voor het uitvoeren van query's geen goede indexen heeft gebruikt
sum_created_tmp_tables bigint(20) NO Totaal aantal tijdelijke tabellen gemaakt
sum_created_tmp_disk_tables bigint(20) NO Totaal aantal tijdelijke tabellen gemaakt op schijf (genereert I/O)
first_seen timestamp NO Het eerste exemplaar (UTC) van de query tijdens het aggregatievenster
last_seen timestamp NO De laatste gebeurtenis (UTC) van de query tijdens dit aggregatievenster

mysql.query_store_wait_stats

Deze weergave retourneert wacht gebeurtenisgegevens in Query Store. Er is één rij voor elke afzonderlijke database-id, gebruikers-id, query-id en gebeurtenis.

Naam Gegevenstype IS_NULLABLE Beschrijving
interval_start timestamp NO Begin van het interval (increment van 15 minuten)
interval_end timestamp NO Einde van het interval (increment van 15 minuten)
query_id bigint(20) NO Gegenereerde unieke id voor de genormaliseerde query (uit querystore)
query_digest_id varchar(32) NO De genormaliseerde querytekst na het verwijderen van alle letterlijke gegevens (uit querystore)
query_digest_text Longtext NO Eerste weergave van de werkelijke query met letterlijke waarden (uit querystore)
event_type varchar(32) NO Categorie van de wacht gebeurtenis
event_name varchar(128) NO Naam van de wacht gebeurtenis
count_star bigint(20) NO Aantal wachtgebeurtenissen dat tijdens het interval voor de query is genomen
sum_timer_wait_ms dubbel NO Totale wachttijd (in milliseconden) van deze query tijdens het interval

Functies

Naam Beschrijving
mysql.az_purge_querystore_data(TIMESTAMP) Verwijdert alle queryopslaggegevens vóór het opgegeven tijdstempel
mysql.az_procedure_purge_querystore_event(TIMESTAMP) Verwijdert alle wachtgebeurtenisgegevens vóór het opgegeven tijdstempel
mysql.az_procedure_purge_recommendation(TIMESTAMP) Aanbevelingen opschonen waarvan de vervaldatum vóór het opgegeven tijdstempel valt

Beperkingen en bekende problemen

  • Als een MySQL-server de parameter read_only heeft ingeschakeld, kan Query Store geen gegevens vastleggen.
  • Query Store-functionaliteit kan worden onderbroken als er lange Unicode-query's worden uitgevoerd (>= 6000 bytes).
  • De bewaarperiode voor wachtstatistieken is 24 uur.
  • Wachtstatistieken maken gebruik van een voorbeeld om een fractie van gebeurtenissen vast te leggen. De frequentie kan worden gewijzigd met behulp van de parameter query_store_wait_sampling_frequency.

Volgende stappen