Protokoly pomalých dotazů ve službě Azure Database for MySQL

PLATÍ PRO: Jednoúčelový server Azure Database for MySQL

Důležité

Jednoúčelový server Azure Database for MySQL je na cestě vyřazení. Důrazně doporučujeme upgradovat na flexibilní server Azure Database for MySQL. Další informace o migraci na flexibilní server Azure Database for MySQL najdete v tématu Co se děje s jednoúčelovým serverem Azure Database for MySQL?

Ve službě Azure Database for MySQL je protokol pomalých dotazů dostupný uživatelům. Přístup k transakčnímu protokolu není podporován. Protokol pomalých dotazů se dá použít k identifikaci kritických bodů výkonu při řešení potíží.

Další informace o protokolu pomalých dotazů MySQL najdete v referenční příručce k protokolu pomalých dotazů MySQL.

Když je na vašem serveru povolené úložiště dotazů, můžou se dotazy jako "CALL mysql.az_procedure_collect_wait_stats (900, 30);" protokolovat v protokolech pomalých dotazů. Toto chování se očekává, protože funkce úložiště dotazů shromažďuje statistiky o dotazech.

Konfigurace protokolování pomalých dotazů

Ve výchozím nastavení je protokol pomalých dotazů zakázaný. Pokud ho chcete povolit, nastavte slow_query_log na zapnuto. To je možné povolit pomocí webu Azure Portal nebo Azure CLI.

Mezi další parametry, které můžete upravit, patří:

  • long_query_time: Pokud dotaz trvá déle než long_query_time (v sekundách), zaprotokoluje se tento dotaz. Výchozí hodnota je 10 sekund.
  • log_slow_admin_statements: Pokud ON obsahuje administrativní prohlášení, jako jsou ALTER_TABLE a ANALYZE_TABLE v prohlášeních napsaných do slow_query_log.
  • log_queries_not_using_indexes: Určuje, jestli jsou dotazy, které nepoužívají indexy, protokolovány do slow_query_log
  • log_throttle_queries_not_using_indexes: Tento parametr omezuje počet neindexovaných dotazů, které je možné zapsat do protokolu pomalých dotazů. Tento parametr se projeví, když je log_queries_not_using_indexes nastavena na ZAPNUTO.
  • log_output: Pokud soubor umožňuje zápis protokolu pomalých dotazů do místního úložiště serveru i do diagnostických protokolů služby Azure Monitor. Pokud ho nastavíte na hodnotu None (Žádné), protokoly pomalých dotazů se budou zapisovat pouze do diagnostických protokolů služby Azure Monitor.

Důležité

Pokud vaše tabulky nejsou indexované, nastavení parametrů log_queries_not_using_indexes a log_throttle_queries_not_using_indexes na hodnotu ON (Zapnuto) může mít vliv na výkon MySQL, protože všechny dotazy spuštěné pro tyto neindexované tabulky se budou zapisovat do protokolu pomalých dotazů.

Pokud plánujete protokolování pomalých dotazů po delší dobu, doporučujeme nastavit log_output hodnotu Žádné. Pokud je tato možnost nastavená na Soubor, zapisují se tyto protokoly do místního úložiště serveru a můžou ovlivnit výkon MySQL.

Úplný popis parametrů protokolu pomalých dotazů najdete v dokumentaci k protokolu pomalých dotazů MySQL.

Přístup k protokolům pomalých dotazů

Pro přístup k protokolům pomalých dotazů ve službě Azure Database for MySQL existují dvě možnosti: úložiště místního serveru nebo diagnostické protokoly služby Azure Monitor. Toto nastavení je nastaveno pomocí parametru log_output .

V případě místního úložiště serveru můžete protokoly pomalých dotazů vypsat a stáhnout pomocí webu Azure Portal nebo Azure CLI. Na webu Azure Portal přejděte ke svému serveru. V části Monitorování vyberte stránku Protokoly serveru. Další informace o Azure CLI najdete v tématu Konfigurace protokolů pomalých dotazů a přístup k nim pomocí Azure CLI.

Diagnostické protokoly služby Azure Monitor umožňují přeskakovat protokoly pomalých dotazů do protokolů služby Azure Monitor (Log Analytics), Azure Storage nebo Event Hubs. Další informace najdete níže .

Uchovávání protokolů úložiště místního serveru

Při přihlašování k místnímu úložišti serveru jsou protokoly k dispozici až sedm dnů od jejich vytvoření. Pokud celková velikost dostupných protokolů přesahuje 7 GB, nejstarší soubory se odstraní, dokud nebude k dispozici místo. Limit úložiště 7 GB pro protokoly serveru je k dispozici zdarma a není možné ho rozšířit.

Protokoly se obměňují každých 24 hodin nebo 7 GB podle toho, co nastane dříve.

Poznámka:

Výše uvedené uchovávání protokolů se nevztahuje na protokoly, které se předávají pomocí diagnostických protokolů služby Azure Monitor. Dobu uchovávání datových jímek, které se generují, můžete změnit na (např. Azure Storage).

Diagnostické protokoly

Služba Azure Database for MySQL je integrovaná s diagnostickými protokoly služby Azure Monitor. Jakmile na serveru MySQL povolíte protokoly pomalých dotazů, můžete je nechat vysílat do protokolů služby Azure Monitor, služby Event Hubs nebo Azure Storage. Další informace o povolení diagnostických protokolů najdete v části Věnované diagnostickým protokolům.

Poznámka:

Účty Premium Storage se nepodporují, pokud odesíláte protokoly do služby Azure Storage prostřednictvím diagnostiky a nastavení.

Následující tabulka popisuje, co je v jednotlivých protokolech. V závislosti na výstupní metodě se pole zahrnutá a pořadí, ve kterém se zobrazují, se mohou lišit.

Vlastnost Popis
TenantId ID vašeho tenanta
SourceSystem Azure
TimeGenerated [UTC] Časové razítko, kdy se protokol zaznamenal v UTC
Type Typ protokolu Vždy AzureDiagnostics
SubscriptionId IDENTIFIKÁTOR GUID předplatného, ke kterému server patří
ResourceGroup Název skupiny prostředků, do které server patří
ResourceProvider Název poskytovatele prostředků Vždy MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId Adresa URI zdroje
Resource Název serveru
Category MySqlSlowLogs
OperationName LogEvent
Logical_server_name_s Název serveru
start_time_t [UTC] Čas zahájení dotazu
query_time_s Celková doba v sekundách, po které trvalo provedení dotazu
lock_time_s Celkový čas v sekundách, kdy byl dotaz uzamčen
user_host_s Username
rows_sent_d Počet odeslaných řádků
rows_examined_s Počet vyšetřených řádků
last_insert_id_s last_insert_id
insert_id_s Vložit ID
sql_text_s Úplný dotaz
server_id_s ID serveru
thread_id_s ID vlákna
\_ResourceId Adresa URI zdroje

Poznámka:

Protokol sql_textbude zkrácen, pokud přesahuje 2048 znaků.

Analýza protokolů v protokolech služby Azure Monitor

Jakmile se protokoly pomalých dotazů předávají do protokolů služby Azure Monitor prostřednictvím diagnostických protokolů, můžete provést další analýzu pomalých dotazů. Níže najdete několik ukázkových dotazů, které vám pomůžou začít. Nezapomeňte aktualizovat následující název serveru.

  • Dotazy delší než 10 sekund na konkrétním serveru

    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
    
  • Seznam 5 nejdelších dotazů na konkrétním serveru

    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
    
  • Shrnutí pomalých dotazů podle minimálního, maximálního, průměrného a směrodatné odchylky doby dotazu na konkrétním serveru

    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
    
  • Graf pomalé distribuce dotazů na konkrétním serveru

    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
    
  • Zobrazení dotazů delších než 10 sekund na všech serverech MySQL s povolenými diagnostickými protokoly

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

Další kroky