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
- Meld u aan bij Azure Portal en selecteer uw Azure Database for MySQL-server.
- Selecteer Serverparameters in de sectie Instellingen van het menu.
- Zoek de parameter query_store_capture_mode.
- Stel de waarde in op ALL en Save.
Wachtstatistieken inschakelen in uw Query Store:
- Zoek de parameter query_store_wait_sampling_capture_mode.
- 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 prestatieaanvelingen voor uw server in de portal om te zien of er indexaankopen zijn voor deze server die de query's zouden optimaliseren. |
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 prestatieaanvelingen 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
- Meer informatie over Inzichten in queryprestaties