Monitorare le prestazioni di Database di Azure per MySQL con Query Store

SI APPLICA A: Database di Azure per MySQL - Server singolo

Importante

Il server singolo del Database di Azure per MySQL è in fase di ritiro. È consigliabile eseguire l'aggiornamento al server flessibile del Database di Azure per MySQL. Per altre informazioni sulla migrazione al server flessibile del Database di Azure per MySQL, vedere Cosa succede al server singolo del Database di Azure per MySQL?

Si applica a: Database di Azure per MySQL 5.7, 8.0

La funzionalità Query Store di Database di Azure per MySQL offre la possibilità di tenere traccia delle prestazioni delle query nel tempo. Query Store semplifica la risoluzione dei problemi di prestazioni consentendo di trovare rapidamente le query con il tempo di esecuzione più lungo e il più elevato utilizzo di risorse. Query Store acquisisce automaticamente una cronologia delle query e le statistiche di runtime e le conserva a scopo di verifica. I dati vengono separati per intervalli di tempo per consentire l'individuazione dei modelli di utilizzo dei database. I dati relativi a utenti, database e query vengono archiviati nel database con schema mysql nell'istanza di Database di Azure per MySQLSQL.

Scenari comuni per l'uso di Query Store

È possibile usare Query Store in numerosi scenari, inclusi i seguenti:

  • Rilevamento di query regredite
  • Determinazione del numero di volte in cui una query è stata eseguita in un determinato intervallo di tempo
  • Confronto del tempo di esecuzione di una query nei diversi intervalli di tempo per identificare differenze significative

Abilitazione di Query Store

Query Store è una funzionalità con consenso esplicito e non è quindi attivo per impostazione predefinita in un server. Viene abilitata o disabilitata a livello globale per tutti i database in un determinato server e non può essere attivata o disattivata in base al database.

Abilitare Query Store con il portale di Azure

  1. Accedere al portale di Azure e selezionare il server di Database di Azure per MySQL.
  2. Selezionare Parametri del server nella sezione Impostazioni del menu.
  3. Cercare il parametro query_store_capture_mode.
  4. Impostare il valore su TUTTO e selezionare Salva.

Per abilitare le statistiche di attesa in Query Store:

  1. Cercare il parametro query_store_wait_sampling_capture_mode.
  2. Impostare il valore su TUTTO e selezionare Salva.

Per il salvataggio permanente del primo batch di dati nel database mysql possono essere necessari fino a 20 minuti.

Informazioni in Query Store

Query Store include due archivi:

  • Un archivio delle statistiche di runtime per il salvataggio permanente delle informazioni sulle statistiche di esecuzione delle query.
  • Un archivio delle statistiche di attesa per il salvataggio permanente delle informazioni sulle statistiche di attesa.

Per ridurre al minimo l'utilizzo di spazio, le statistiche di esecuzione di runtime nell'archivio delle statistiche di runtime vengono aggregate per un intervallo di tempo fisso configurabile. Le informazioni negli archivi sono visibili eseguendo query sulle viste di Query Store.

La query seguente restituisce informazioni sulle query in Query Store:

SELECT * FROM mysql.query_store;

In alternativa, usare questa query per le statistiche di attesa:

SELECT * FROM mysql.query_store_wait_stats;

Ricerca di query in relazione all'attesa

Nota

Le statistiche di attesa non devono essere abilitate durante le ore di picco del carico di lavoro o essere attivate per un periodo illimitato per carichi di lavoro sensibili.
Per i carichi di lavoro in esecuzione con utilizzo elevato della CPU o su server configurati con vCore inferiori, prestare attenzione quando si abilitano le statistiche di attesa. Non devono essere attivate per un periodo illimitato.

I tipi di eventi di attesa combinano diversi eventi di attesa in bucket in base alla somiglianza. Query Store indica il tipo di evento di attesa, il nome dello specifico evento di attesa e la query in questione. La possibilità di correlare queste informazioni sulle attese alle statistiche di runtime delle query consente di comprendere in modo più approfondito ciò che contribuisce alle caratteristiche di prestazioni delle query.

Di seguito sono riportati alcuni esempi di come è possibile ottenere informazioni dettagliate sul carico di lavoro usando le statistiche di attesa in Query Store:

Osservazione Azione
Attese di blocco elevate Controllare il testo delle query interessate e identificare le entità di destinazione. Cercare in Query Store altre query che modificano la stessa entità e che vengono eseguite spesso e/o hanno durata elevata. Dopo aver identificato tali query, valutare la possibilità di modificare la logica dell'applicazione per migliorare la concorrenza o usare un livello di isolamento meno restrittivo.
Attese di I/O del buffer elevate Trovare le query con un numero elevato di letture fisiche in Query Store. Se corrispondono alle query con attese di I/O elevate, valutare la possibilità di introdurre un indice sull'entità sottostante per eseguire ricerche anziché analisi. Questo ridurrebbe al minimo il sovraccarico di I/O delle query. Controllare le raccomandazioni per le prestazioni relative al server nel portale per verificare se sono presenti raccomandazioni sugli indici per il server che ottimizzerebbero le query.
Attese di memoria elevate Trovare le query con il maggiore utilizzo di memoria in Query Store. Queste query probabilmente ritardano l'avanzamento delle query interessate. Controllare le raccomandazioni per le prestazioni relative al server nel portale per verificare se sono presenti raccomandazioni sugli indici che ottimizzerebbero queste query.

Opzioni di configurazione

Quando è abilitato, Query Store salva i dati in intervalli di aggregazione di 15 minuti, con un massimo di 500 query distinte per intervallo.

Per la configurazione dei parametri di Query Store sono disponibili le opzioni seguenti.

Parametro Descrizione Default Intervallo
query_store_capture_mode Attivare o disattivare la funzionalità Query Store in base al valore. Nota: se performance_schema è DISATTIVATo, l'attivazione di query_store_capture_mode attiva performance_schema e un subset di strumenti dello schema delle prestazioni necessari per questa funzionalità. ALL NESSUNO, TUTTO
query_store_capture_interval Intervallo di acquisizione di Query Store espresso in minuti. Consente di specificare l'intervallo in cui vengono aggregate le metriche della query. 15 5 - 60
query_store_capture_utility_queries Attivazione o disattivazione per acquisire tutte le query di utilità in esecuzione nel sistema. NO SÌ, NO
query_store_retention_period_in_days Intervallo di tempo espresso in giorni per la conservazione dei dati in Query Store. 7 1-30

Le opzioni seguenti si applicano specificamente alle statistiche di attesa.

Parametro Descrizione Default Intervallo
query_store_wait_sampling_capture_mode Consente di attivare/disattivare le statistiche di attesa. NONE NESSUNO, TUTTO
query_store_wait_sampling_frequency Modifica la frequenza del campionamento di attesa espressa in secondi. Da 5 a 300 secondi 30 5 - 300

Nota

Attualmente query_store_capture_mode sostituisce questa configurazione, vale a dire che query_store_capture_mode e query_store_wait_sampling_capture_mode devono essere impostati su TUTTO affinché le statistiche di attesa funzionino. Se query_store_capture_mode è disattivato, lo saranno anche le statistiche di attesa, perché usano il parametro performance_schema abilitato e il parametro query_text acquisito da Query Store.

Per ottenere o impostare un diverso valore per un parametro, usare il portale di Azure o l'interfaccia della riga di comando di Azure.

Viste e funzioni

Visualizzare e gestire Query Store usando le viste e le funzioni seguenti. Queste viste possono essere usate da qualsiasi membro del ruolo pubblico con privilegi selezionati per visualizzare i dati in Query Store e sono disponibili solo nel database mysql.

Le query vengono normalizzate esaminandone la struttura dopo la rimozione di valori letterali e costanti. Due query identiche tranne per i valori letterali avranno lo stesso hash.

mysql.query_store

Questa vista restituisce tutti i dati in Query Store. Contiene una riga per ogni specifico ID database, ID utente e ID query.

Nome Tipo di dati IS_NULLABLE Descrizione
schema_name varchar(64) NO Nome dello schema
query_id bigint(20) NO ID univoco generato per la query specifica. Se la stessa query viene eseguita in uno schema diverso, verrà generato un nuovo ID
timestamp_id timestamp NO Timestamp in cui viene eseguita la query. Si basa sulla configurazione di query_store_interval
query_digest_text longtext NO Testo della query normalizzata dopo la rimozione di tutti i valori letterali
query_sample_text longtext NO Primo aspetto della query effettiva con valori letterali
query_digest_truncated bit Indica se il testo della query è stato troncato. Il valore sarà Yes se la query è più lunga di 1 KB
execution_count bigint(20) NO Numero di volte in cui la query è stata eseguita per questo ID timestamp/durante il periodo di intervallo configurato
warning_count bigint(20) NO Numero di avvisi generati dalla query durante l'esecuzione interna
error_count bigint(20) NO Numero di errori generati dalla query durante l'intervallo
sum_timer_wait double Tempo di esecuzione totale della query durante l'intervallo in millisecondi
avg_timer_wait double Tempo medio di esecuzione per la query durante l'intervallo in millisecondi
min_timer_wait double Tempo di esecuzione minimo per questa query in millisecondi
max_timer_wait double Tempo di esecuzione massimo in millisecondi
sum_lock_time bigint(20) NO Quantità totale di tempo impiegato per tutti i blocchi per l'esecuzione di questa query durante questo intervallo di tempo
sum_rows_affected bigint(20) NO numero di righe interessate
sum_rows_sent bigint(20) NO Numero di righe inviate al client
sum_rows_examined bigint(20) NO Numero di righe esaminate
sum_select_full_join bigint(20) NO Numero di join completi
sum_select_scan bigint(20) NO Numero di analisi di selezione
sum_sort_rows bigint(20) NO Numero di righe ordinate
sum_no_index_used bigint(20) NO Numero di volte in cui la query non ha usato indici
sum_no_good_index_used bigint(20) NO Numero di volte in cui il motore di esecuzione delle query non ha usato indici validi
sum_created_tmp_tables bigint(20) NO Numero totale di tabelle temporanee create
sum_created_tmp_disk_tables bigint(20) NO Numero totale di tabelle temporanee create nel disco (genera I/O)
first_seen timestamp NO Prima occorrenza (UTC) della query durante la finestra di aggregazione
last_seen timestamp NO Ultima occorrenza (UTC) della query durante la finestra di aggregazione

mysql.query_store_wait_stats

Questa vista restituisce i dati degli eventi di attesa in Query Store. Contiene una riga per ogni specifico ID database, ID utente, ID query ed evento.

Nome Tipo di dati IS_NULLABLE Descrizione
interval_start timestamp NO Inizio intervallo (incremento di 15 minuti)
interval_end timestamp NO Fine intervallo (incremento di 15 minuti)
query_id bigint(20) NO ID univoco generato nella query normalizzata (da Query Store)
query_digest_id varchar(32) NO Testo della query normalizzata dopo la rimozione di tutti i valori letterali (da Query Store)
query_digest_text longtext NO Primo aspetto della query effettiva con valori letterali (da Query Store)
event_type varchar(32) NO Categoria dell'evento di attesa
event_name varchar(128) NO Nome dell'evento di attesa
count_star bigint(20) NO Numero di eventi di attesa campionati durante l'intervallo per la query
sum_timer_wait_ms double NO Tempo totale di attesa (espresso in millisecondi) di questa query durante l'intervallo

Funzioni

Nome Descrizione
mysql.az_purge_querystore_data(TIMESTAMP) Elimina tutti i dati di Query Store prima del timestamp specificato
mysql.az_procedure_purge_querystore_event(TIMESTAMP) Elimina tutti i dati dell'evento di attesa prima del timestamp specificato
mysql.az_procedure_purge_recommendation(TIMESTAMP) Elimina le raccomandazioni la cui scadenza è precedente al timestamp specificato

Limitazioni e problemi noti

  • Se per un server MySQL è attivo il parametro read_only, Query Store non può acquisire i dati.
  • La funzionalità Query Store può essere interrotta se si verificano query Unicode lunghe (> = 6000 byte).
  • Il periodo di conservazione per le statistiche di attesa è di 24 ore.
  • Le statistiche di attesa usano l'esempio per acquisire una frazione di eventi. La frequenza può essere modificata usando il parametro query_store_wait_sampling_frequency.

Passaggi successivi