Log di query lente in Database di Azure per MySQL
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 a Database di Azure per MySQL - Server flessibile, vedere Cosa succede a Database di Azure per MySQL - Server singolo?
Nel Database di Azure per MySQL, il log delle query lente è disponibile per gli utenti. L'accesso al log delle transazioni non è supportato. Il log delle query lente può essere usato per identificare eventuali colli di bottiglia delle prestazioni e procedere alla risoluzione dei problemi.
Per altre informazioni sul log delle query lente MySQL, vedere la sezione relativa ai log di query lente del manuale di riferimento per MySQL.
Quando Query Store è abilitato nel server, è possibile visualizzare le query come "CALL mysql.az_procedure_collect_wait_stats (900, 30);
" registrate nei log di query lente. Questo comportamento è previsto perché la funzionalità Query Store raccoglie statistiche sulle query.
Configurare la registrazione delle query lente
Per impostazione predefinita il log delle query lente è disabilitato. Per abilitarla, impostare su slow_query_log
ON. Questa opzione può essere abilitata usando il portale di Azure o l'interfaccia della riga di comando di Azure.
Altri parametri che è possibile modificare includono:
- long_query_time: se una query richiede più tempo del valore di long_query_time (in secondi), la query viene registrata. Il valore predefinito è 10 secondi.
- log_slow_admin_statements: se è ON include le istruzioni a livello amministrativo come ALTER_TABLE e ANALYZE_TABLE nelle istruzioni scritte in slow_query_log.
- log_queries_not_using_indexes: determina se le query che non usano gli indici vengono registrate in slow_query_log
- log_throttle_queries_not_using_indexes: questo parametro limita il numero di query non di indice che possono essere scritte nel log di query lente. Questo parametro ha effetto quando log_queries_not_using_indexes è impostato su ON.
- log_output: se "File", consente di scrivere il log delle query lente sia nell'archiviazione del server locale che nei log di diagnostica di Monitoraggio di Azure. Se è "Nessuna", il log di query lente verrà scritto solo nei log di diagnostica di Monitoraggio di Azure.
Importante
Se le tabelle non sono indicizzate, l'impostazione dei parametri log_queries_not_using_indexes
e log_throttle_queries_not_using_indexes
su ATTIVATO potrebbe influire sulle prestazioni di MySQL perché tutte le query in esecuzione su tali tabelle non indicizzate verranno scritte nel log di query lente.
Se si prevede di registrare query lente per un lungo periodo di tempo, è consigliabile impostare log_output
su "Nessuno". Se impostato su "File", questi log vengono scritti nell'archiviazione del server locale e possono influire sulle prestazioni di MySQL.
Per una descrizione completa dei parametri per il log di query lente, vedere la documentazione sul log di query lente per MySQL.
Accedere ai log di query lente
Esistono due opzioni per accedere ai log di query lente in Database di Azure per MySQL: archiviazione server locale o Log di diagnostica di Monitoraggio di Azure. Viene impostato usando il log_output
parametro .
Per l'archiviazione del server locale, è possibile elencare e scaricare log di query lente usando il portale di Azure o l'interfaccia della riga di comando di Azure. Nella portale di Azure passare al server. Nell'intestazione Monitoraggio selezionare la pagina Log del server. Per altre informazioni sull'interfaccia della riga di comando di Azure, vedere Configurare e accedere ai log di query lente usando l'interfaccia della riga di comando di Azure.
I log di diagnostica di Monitoraggio di Azure consentono di inviare tramite pipe log di query lente ai log di Monitoraggio di Azure (Log Analytics), Archiviazione di Azure o Hub eventi. Per altre informazioni, vedere di seguito .
Conservazione dei log di archiviazione del server locale
Quando si accede all'archiviazione locale del server, i log sono disponibili per un massimo di sette giorni dalla creazione. Se le dimensioni totali dei log disponibili superano i 7 GB, i file meno recenti vengono eliminati fino a quando non è disponibile spazio. Il limite di archiviazione di 7 GB per i log del server è disponibile gratuitamente e non può essere esteso.
I log vengono ruotati ogni 24 ore o 7 GB, a seconda del valore raggiunto per primo.
Nota
La conservazione dei log precedente non si applica ai log inviati tramite pipe usando i log di diagnostica di Monitoraggio di Azure. È possibile modificare il periodo di conservazione per i sink di dati in cui vengono generati (ad esempio, Archiviazione di Azure).
Log di diagnostica
Database di Azure per MySQL è integrato con i log di diagnostica di Monitoraggio di Azure. Dopo aver abilitato i log di query lente nel server MySQL, è possibile scegliere di inviarli ai log di Monitoraggio di Azure, a Hub eventi o a Archiviazione di Azure. Per altre informazioni sull'abilitazione dei log di diagnostica, vedere la sezione sulle procedure della documentazione sui log di diagnostica.
Nota
Archiviazione Premium account non sono supportati se si inviano i log all'archiviazione di Azure tramite diagnostica e impostazioni
La tabella seguente descrive il contenuto di ogni log. A seconda del metodo di output, è possibile che i campi inclusi e il relativo ordine di visualizzazione siano differenti.
Proprietà | Descrizione |
---|---|
TenantId |
ID del tenant. |
SourceSystem |
Azure |
TimeGenerated [UTC] |
Timestamp in cui il log è stato registrato in formato UTC. |
Type |
Tipo di log. Sempre AzureDiagnostics |
SubscriptionId |
GUID per la sottoscrizione a cui appartiene il server. |
ResourceGroup |
Nome del gruppo di risorse a cui appartiene il server. |
ResourceProvider |
Nome del provider di risorse. Sempre MICROSOFT.DBFORMYSQL |
ResourceType |
Servers |
ResourceId |
URI risorsa |
Resource |
Nome del server |
Category |
MySqlSlowLogs |
OperationName |
LogEvent |
Logical_server_name_s |
Nome del server |
start_time_t [UTC] |
Ora di inizio della query |
query_time_s |
Tempo totale in secondi impiegato dalla query per l'esecuzione |
lock_time_s |
Tempo totale in secondi in cui la query è stata bloccata |
user_host_s |
Username |
rows_sent_d |
Numero di righe inviate |
rows_examined_s |
Numero di righe esaminate |
last_insert_id_s |
last_insert_id |
insert_id_s |
INSERISCI ID |
sql_text_s |
Query completa |
server_id_s |
ID del server |
thread_id_s |
ID thread |
\_ResourceId |
URI risorsa |
Nota
Per sql_text
, il log verrà troncato se supera i 2048 caratteri.
Analizzare i log in Log di Monitoraggio di Azure
Dopo che i log delle query lente vengono inviati tramite pipe ai log di Monitoraggio di Azure tramite i log di diagnostica, è possibile eseguire un'ulteriore analisi delle query lente. Di seguito sono riportate alcune query di esempio che consentono di iniziare. Assicurarsi di aggiornare il codice seguente con il nome del server.
Query più lunghe di 10 secondi in un determinato server
AzureDiagnostics | where LogicalServerName_s == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s | where query_time_d > 10
Elencare le prime 5 query più lunghe in un determinato server
AzureDiagnostics | where LogicalServerName_s == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s | order by query_time_d desc | take 5
Riepilogare le query lente per tempo di query minimo, massimo, medio e deviazione standard in un determinato server
AzureDiagnostics | where LogicalServerName_s == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s | summarize count(), min(query_time_d), max(query_time_d), avg(query_time_d), stdev(query_time_d), percentile(query_time_d, 95) by LogicalServerName_s
Grafico della distribuzione delle query lente in un server specifico
AzureDiagnostics | where LogicalServerName_s == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s | summarize count() by LogicalServerName_s, bin(TimeGenerated, 5m) | render timechart
Visualizzare le query più lunghe di 10 secondi in tutti i server MySQL con i log di diagnostica abilitati
AzureDiagnostics | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s | where query_time_d > 10