Dzienniki wolnych zapytań w usłudze Azure Database for MySQL — serwer elastyczny

DOTYCZY: Azure Database for MySQL — serwer elastyczny

Na serwerze elastycznym usługi Azure Database for MySQL dziennik wolnych zapytań jest dostępny dla użytkowników w celu skonfigurowania i uzyskania dostępu. Dzienniki wolnych zapytań są domyślnie wyłączone i można je włączyć, aby ułatwić identyfikowanie wąskich gardeł wydajności podczas rozwiązywania problemów.

Aby uzyskać więcej informacji na temat dziennika wolnych zapytań MySQL, zobacz sekcję dzienników wolnych zapytań w dokumentacji aparatu MySQL.

Konfigurowanie rejestrowania wolnych zapytań

Domyślnie dziennik wolnych zapytań jest wyłączony. Aby włączyć dzienniki, ustaw slow_query_log parametr serwera na . Można to skonfigurować przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.

Inne parametry, które można dostosować do kontrolowania zachowania rejestrowania wolnych zapytań, obejmują:

  • long_query_time: zarejestruj zapytanie, jeśli ukończenie zapytania trwa dłużej niż long_query_time (w sekundach). Wartość domyślna to 10 sekund. Parametr long_query_time serwera jest stosowany globalnie do wszystkich nowo ustanowionych połączeń w programie MySQL. Nie ma to jednak wpływu na wątki, które są już połączone. Zaleca się ponowne nawiązanie połączenia z serwerem elastycznym usługi Azure Database for MySQL z aplikacji lub ponowne uruchomienie serwera pomoże wyczyścić wątki ze starszymi wartościami "long_query_time" i zastosować zaktualizowaną wartość parametru.
  • log_slow_admin_statements: określa, czy instrukcje administracyjne (np. ALTER_TABLE, ANALYZE_TABLE) są rejestrowane.
  • log_queries_not_using_indexes: określa, czy zapytania, które nie używają indeksów, są rejestrowane.
  • log_throttle_queries_not_using_indexes: ogranicza liczbę nieindeksowanych zapytań, które mogą być zapisywane w dzienniku wolnych zapytań. Ten parametr ma wpływ, gdy log_queries_not_using_indexes jest ustawiony na WARTOŚĆ WŁĄCZONE

Ważne

Jeśli tabele nie są indeksowane, ustawienie log_queries_not_using_indexes parametrów i log_throttle_queries_not_using_indexes na WARTOŚĆ ON może mieć wpływ na wydajność bazy danych MySQL, ponieważ wszystkie zapytania uruchomione względem tych nieindeksowanych tabel zostaną zapisane w dzienniku wolnych zapytań.

Zapoznaj się z dokumentacją dziennika wolnych zapytań MySQL, aby uzyskać pełne opisy parametrów dziennika wolnych zapytań.

Uzyskiwanie dostępu do dzienników wolnych zapytań

Dzienniki wolnych zapytań są zintegrowane z ustawieniami diagnostycznymi usługi Azure Monitor. Po włączeniu dzienników wolnych zapytań w wystąpieniu serwera elastycznego usługi Azure Database for MySQL można je emitować do dzienników usługi Azure Monitor, usługi Event Hubs lub usługi Azure Storage. Aby dowiedzieć się więcej na temat ustawień diagnostycznych, zobacz dokumentację dzienników diagnostycznych. Aby dowiedzieć się więcej na temat włączania ustawień diagnostycznych w witrynie Azure Portal, zobacz artykuł dotyczący portalu dzienników wolnych zapytań.

Uwaga

Konta usługi Premium Storage nie są obsługiwane, jeśli wysyłasz dzienniki do usługi Azure Storage za pośrednictwem diagnostyki i ustawień.

W poniższej tabeli opisano dane wyjściowe dziennika wolnych zapytań. W zależności od metody wyjściowej uwzględnione pola i kolejność ich wyświetlania mogą się różnić.

Właściwości Opis
TenantId Identyfikator dzierżawy
SourceSystem Azure
TimeGenerated [UTC] Sygnatura czasowa zarejestrowania dziennika w formacie UTC
Type Typ dziennika. Zawsze AzureDiagnostics
SubscriptionId Identyfikator GUID subskrypcji, do którego należy serwer
ResourceGroup Nazwa grupy zasobów, do którego należy serwer
ResourceProvider Nazwa dostawcy zasobów. Zawsze MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId Identyfikator URI zasobu
Resource Nazwa serwera
Category MySqlSlowLogs
OperationName LogEvent
Logical_server_name_s Nazwa serwera
start_time_t [UTC] Czas rozpoczęcia zapytania
query_time_s Łączny czas w sekundach wykonywania zapytania
lock_time_s Łączny czas w sekundach, w których zapytanie zostało zablokowane
user_host_s Username
rows_sent_s Liczba wysłanych wierszy
rows_examined_s Liczba zbadanych wierszy
last_insert_id_s last_insert_id
insert_id_s Wstaw identyfikator
sql_text_s Pełne zapytanie
server_id_s Identyfikator serwera
thread_id_s Identyfikator wątku
\_ResourceId Identyfikator URI zasobu

Uwaga

W przypadku sql_text_sprogramu dziennik zostanie obcięty, jeśli przekroczy 2048 znaków.

Analizowanie dzienników w dziennikach usługi Azure Monitor

Po potoku dzienników wolnych zapytań do dzienników usługi Azure Monitor za pomocą dzienników diagnostycznych można przeprowadzić dalszą analizę wolnych zapytań. Poniżej przedstawiono kilka przykładowych zapytań, które ułatwiają rozpoczęcie pracy. Pamiętaj o zaktualizowaniu poniższej nazwy serwera.

  • Zapytania dłuższe niż 10 sekund na określonym serwerze

    AzureDiagnostics
    | where Resource  == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s
    | where query_time_d > 10
    
  • Wyświetlanie listy 5 najdłuższych zapytań na określonym serwerze

    AzureDiagnostics
    | where Resource  == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s
    | order by query_time_d desc
    | take 5
    
  • Podsumowywanie wolnych zapytań według minimalnej, maksymalnej, średniej i czasu zapytania odchylenia standardowego na określonym serwerze

    AzureDiagnostics
    | where Resource  == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_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 Resource 
    
  • Wykres dystrybucji wolnych zapytań na określonym serwerze

    AzureDiagnostics
    | where Resource  == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s
    | summarize count() by Resource , bin(TimeGenerated, 5m)
    | render timechart
    
  • Wyświetlanie zapytań dłuższych niż 10 sekund we wszystkich wystąpieniach serwera elastycznego usługi Azure Database for MySQL z włączonymi dziennikami diagnostycznymi

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

Następne kroki