Protokolle für langsame Abfragen in Azure Database for MySQL

GILT FÜR:Azure Database for MySQL – Single Server

Wichtig

Azure Database for MySQL single server is on the retirement path. Es wird dringend empfohlen, ein Upgrade auf azure Database for MySQL flexiblen Server durchzuführen. Weitere Informationen zum Migrieren zu Azure Database for MySQL flexible Server finden Sie unter Was geschieht mit Azure Database for MySQL Single Server?

In Azure Database for MySQL ist das Protokoll für langsame Abfragen für Benutzer verfügbar. Der Zugriff auf das Transaktionsprotokoll wird jedoch nicht unterstützt. Das Protokoll für langsame Abfragen kann verwendet werden, um Leistungsengpässe für die Problembehandlung zu erkennen.

Weitere Informationen zum MySQL-Protokoll für langsame Abfragen finden Sie im Abschnitt zu langsamen Abfragen im MySQL-Referenzhandbuch.

Wenn Abfragespeicher auf dem Server aktiviert ist, werden in Ihren Protokollen für langsame Abfragen möglicherweise Abfragen wie „CALL mysql.az_procedure_collect_wait_stats (900, 30);“ erfasst. Dieses Verhalten ist zu erwarten, da das Feature Abfragespeicher Statistiken zu Ihren Abfragen sammelt.

Konfigurieren der Protokollierung für langsame Abfragen

Das Protokoll für langsame Abfragen ist standardmäßig deaktiviert. Um sie zu aktivieren, legen Sie slow_query_log auf ON fest. Diese Aktivierung kann über das Azure-Portal oder die Azure CLI erfolgen.

Weitere Parameter, die Sie anpassen können:

  • long_query_time: Die Abfrage wird protokolliert, wenn sie länger als „long_query_time“ (in Sekunden) dauert. Der Standardwert ist 10 Sekunden.
  • log_slow_admin_statements: Wenn „ON“, sind administrative Anweisungen wie ALTER_TABLE und ANALYZE_TABLE in den Anweisungen enthalten, die in „slow_query_log“ geschrieben werden.
  • log_queries_not_using_indexes: Bestimmt, ob Abfragen, die keine Indizes verwenden, in „slow_query_log“ protokolliert werden.
  • log_throttle_queries_not_using_indexes: Dieser Parameter begrenzt die Anzahl der Nichtindexabfragen, die in das Protokoll für langsame Abfragen geschrieben werden können. Dieser Parameter wird wirksam, wenn „log_queries_not_using_indexes“ auf „ON“ festgelegt ist.
  • log_output: Wenn „file“, kann das Protokoll für langsame Abfragen sowohl in den lokalen Serverspeicher als auch in Azure Monitor-Diagnoseprotokolle geschrieben werden. Wenn der Parameter „None“ lautet, wird das Protokoll für langsame Abfragen nur in Azure Monitor-Diagnoseprotokolle geschrieben.

Wichtig

Wenn Ihre Tabellen nicht indiziert sind, kann das Festlegen der Parameter log_queries_not_using_indexes und log_throttle_queries_not_using_indexes auf ON (EIN) die Leistung von MySQL beeinträchtigen, da alle Anforderungen, die für diese nicht indizierten Tabellen ausgeführt werden, in das Protokoll für langsame Abfragen geschrieben werden.

Wenn Sie langsame Abfragen für längere Zeit protokollieren möchten, wird empfohlen, log_output auf „None“ (Kein) festzulegen. Wenn „File“ (Datei) festgelegt ist, werden diese Protokolle in den Speicher des lokalen Servers geschrieben und können sich negativ auf die MySQL-Leistung auswirken.

Vollständige Beschreibungen der Parameter des Protokolls für langsame Abfragen finden Sie in der MySQL-Dokumentation zum Protokoll für langsame Abfragen.

Zugreifen auf Protokolle für langsame Abfragen

Es gibt zwei Optionen für den Zugriff auf langsame Abfrageprotokolle in Azure Database for MySQL: lokaler Serverspeicher oder Azure Monitor-Diagnoseprotokolle. Die Festlegung erfolgt mit dem Parameter log_output.

Beim lokalen Serverspeicher können Sie langsame Abfrageprotokolle über das Azure-Portal oder die Azure CLI auflisten und herunterladen. Navigieren Sie im Azure-Portal zu Ihrem Server. Wählen Sie unter der Überschrift Überwachung die Seite Serverprotokolle aus. Weitere Informationen zur Azure-Befehlszeilenschnittstelle finden Sie unter Konfigurieren der und Zugreifen auf die Serverprotokolle mithilfe der Azure-Befehlszeilenschnittstelle.

Azure Monitor-Diagnoseprotokolle ermöglichen es Ihnen, langsame Abfrageprotokolle an Azure Monitor-Protokolle (Protokollanalyse), Azure Storage oder Event Hubs zu senden. Weitere Informationen finden Sie unten.

Protokollaufbewahrung im lokalen Serverspeicher

Wenn Sie sich beim lokalen Speicher des Servers anmelden, stehen Protokolle bis zu sieben Tage ab dem Zeitpunkt ihrer Erstellung zur Verfügung. Wenn die Gesamtgröße der verfügbaren Protokolle 7 GB überschreitet, werden die ältesten Dateien gelöscht, bis Speicherplatz verfügbar ist. Das Speicherlimit von 7 GB für die Serverprotokolle ist kostenlos verfügbar und kann nicht erweitert werden.

Die Protokolle werden alle 24 Stunden oder bei Erreichen einer Größe von 7 GB rotiert, je nachdem, welches Ereignis früher eintritt.

Hinweis

Die zuvor genannte Protokollaufbewahrung gilt nicht für Protokolle, die mithilfe von Azure Monitor-Diagnoseprotokolle gesendet werden. Sie können die Aufbewahrungsdauer für die Datensenken ändern, an die eine Ausgabe erfolgt (z. B. Azure Storage).

Diagnoseprotokolle

Azure Database for MySQL ist in Azure Monitor-Diagnoseprotokolle integriert. Nachdem Sie die Protokolle zu langsamen Abfragen auf Ihrem MySQL-Server aktiviert haben, können Sie diese an Azure Monitor-Protokolle, Event Hubs oder Azure Storage ausgeben. Weitere Informationen zum Aktivieren von Diagnoseprotokollen finden Sie im Gewusst-wie-Abschnitt der Dokumentation zu Diagnoseprotokollen.

Hinweis

Storage Premium-Konten werden nicht unterstützt, wenn Sie die Protokolle über Diagnosen und Einstellungen an Azure Storage senden.

In der folgenden Tabelle wird der Inhalt der einzelnen Protokolle beschrieben. Je nach Ausgabemethode können die enthaltenen Felder und ihre Reihenfolge variieren.

Eigenschaft Beschreibung
TenantId Ihre Mandanten-ID
SourceSystem Azure
TimeGenerated [UTC] Zeitstempel für den Aufzeichnungsbeginn des Protokolls in UTC
Type Typ des Protokolls Immer AzureDiagnostics
SubscriptionId GUID für das Abonnement, zu dem der Server gehört
ResourceGroup Name der Ressourcengruppe, zu der der Server gehört
ResourceProvider Name des Ressourcenanbieters Immer MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId Ressourcen-URI
Resource Name des Servers
Category MySqlSlowLogs
OperationName LogEvent
Logical_server_name_s Name des Servers
start_time_t [UTC] Uhrzeit, zu der die Abfrage begann
query_time_s Gesamtzeit (in Sekunden), die die Ausführung der Abfrage gedauert hat
lock_time_s Gesamtzeit in Sekunden, während der die Abfrage gesperrt war
user_host_s Username
rows_sent_d Anzahl gesendeter Zeilen
rows_examined_s Anzahl untersuchter Zeilen
last_insert_id_s last_insert_id
insert_id_s Einfüge-ID
sql_text_s Vollständige Abfrage
server_id_s Die ID des Servers
thread_id_s Thread-ID
\_ResourceId Ressourcen-URI

Hinweis

Bei sql_text wird das Protokoll abgeschnitten, wenn es länger als 2.048 Zeichen ist.

Analysieren von Protokollen in Azure Monitor-Protokollen

Sobald die Protokolle für langsamen Abfragen an Azure Monitor-Protokolle über Diagnoseprotokolle weitergeleitet werden, können Sie weitere Analysen Ihrer langsamen Abfragen durchführen. Im Folgenden finden Sie einige Beispielabfragen, die Ihnen beim Einstieg helfen. Stellen Sie sicher, dass Sie die Abfragen unten mit Ihrem Servernamen aktualisieren.

  • Abfragen auf einem bestimmten Server, die länger als 10 Sekunden dauern

    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
    
  • Auflisten der 5 längsten Abfragen auf einem bestimmten 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
    
  • Zusammenfassen langsamer Abfragen nach minimaler, maximaler, durchschnittlicher Dauer und standardmäßigen Abweichungen der Abfragezeit auf einem bestimmten 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
    
  • Diagramm der Verteilung langsamer Abfragen auf einem bestimmten 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() by LogicalServerName_s, bin(TimeGenerated, 5m)
    | render timechart
    
  • Anzeigen von Abfragen, die länger als 10 Sekunden für alle MySQL-Server mit aktivierten Diagnoseprotokollen dauern

    AzureDiagnostics
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s 
    | where query_time_d > 10
    

Nächste Schritte