共用方式為


適用於 MySQL 的 Azure 資料庫 - 彈性伺服器中的慢速查詢記錄

在 適用於 MySQL 的 Azure 資料庫 彈性伺服器中,用戶可以使用慢速查詢記錄來設定和存取。 慢速查詢記錄會預設為停用並可啟用,以協助在疑難排解期間找出效能瓶頸。

如需 MySQL 慢速查詢記錄的詳細資訊,請參閱 MySQL 引擎文件的慢速查詢記錄 (英文) 一節。

設定慢速查詢記錄

依預設,會停用慢速查詢記錄。 若要啟用記錄,請將 slow_query_log 伺服器參數設為 ON。 這可使用 Azure 入口網站或 Azure CLI 進行設定。

您可以調整其他參數,以控制慢速查詢記錄行為,包括:

  • long_query_time:如果查詢花費的時間超過 long_query_time (秒),則記錄查詢。 預設值是 [10 秒]。 伺服器參數 long_query_time 會全域套用至 MySQL 中所有新建立的連線。 不過,它不會影響已連線的執行緒。 建議您從應用程式重新連線到 適用於 MySQL 的 Azure 資料庫 彈性伺服器,或重新啟動伺服器將有助於清除具有舊值 「long_query_time」 的線程,並套用更新的參數值。
  • log_slow_admin_statements:判斷是否記錄系統陳述式 (例如:ALTER_TABLEANALYZE_TABLE)。
  • log_queries_not_using_indexes:決定是否記錄未使用索引的查詢。
  • log_throttle_queries_not_using_indexes:限制可寫入至慢速查詢記錄的非索引查詢次數。 log_queries_not_using_indexes 設為 ON 時,此參數將生效

重要

如果您的數據表未編製索引,將 和 log_throttle_queries_not_using_indexes 參數設定log_queries_not_using_indexesON 可能會影響 MySQL 效能,因為針對這些非索引數據表執行的所有查詢都會寫入慢速查詢記錄。

如需慢速查詢記錄參數的完整描述,請參閱 MySQL 慢速查詢記錄文件

存取慢速查詢記錄

慢速查詢記錄會與 Azure 監視器診斷設定整合。 當您在 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例上啟用慢速查詢記錄之後,您可以將它們發出至 Azure 監視器記錄、事件中樞或 Azure 儲存體。 若要深入瞭解診斷設定,請參閱診斷記錄文件。 若要深入了解如何在 Azure 入口網站中啟用診斷設定,請參閱慢速查詢記錄入口網站文章 (部分機器翻譯)。

注意

如果透過診斷和設定將記錄傳送至 Azure 儲存體,則不支援進階儲存體帳戶。

下表描述慢速查詢記錄的輸出。 視輸出方法而定,包含的字段及其顯示順序可能會有所不同。

屬性 說明
TenantId 您的租用戶識別碼
SourceSystem Azure
TimeGenerated [UTC] 以 UTC 記錄記錄時的時間戳記
Type 記錄的類型。 一律為 AzureDiagnostics
SubscriptionId 伺服器所屬訂用帳戶的 GUID
ResourceGroup 伺服器所屬資源群組的名稱
ResourceProvider 資源提供者名稱。 一律為 MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId 資源 URI
Resource 伺服器的名稱
Category MySqlSlowLogs
OperationName LogEvent
Logical_server_name_s 伺服器的名稱
start_time_t [UTC] 查詢開始時間
query_time_s 執行查詢所花費的總時間 (以秒為單位)
lock_time_s 查詢遭到鎖定的總時間 (以秒為單位)
user_host_s 使用者名稱
rows_sent_s 傳送的資料列數目
rows_examined_s 檢查的資料列數目
last_insert_id_s last_insert_id
insert_id_s 插入識別碼
sql_text_s 完整查詢
server_id_s 伺服器的識別碼
thread_id_s 執行緒 ID
\_ResourceId 資源 URI

注意

對於 sql_text_s,如果記錄超過 2048 個字元,將會遭到截斷。

分析 Azure 監視器記錄中的記錄

透過診斷記錄將慢速查詢記錄輸送至 Azure 監視器記錄後,您即可對慢速查詢執行進一步分析。 以下是可協助您開始使用的範例查詢。 務必以您的伺服器名稱更新以下內容。

  • 特定伺服器上超過 10 秒的查詢

    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
    
  • 列出特定伺服器上的前 5 個最長查詢

    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
    
  • 依在特定伺服器上的最小、最大、平均和標準差査詢時間總結慢速査詢

    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
    
  • 繪製特定伺服器上的慢速查詢分佈

    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
    
  • 在所有 適用於 MySQL 的 Azure 資料庫 已啟用診斷記錄的彈性伺服器實例上顯示超過10秒的查詢

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