分享方式:


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

適用於:適用於 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_queries_not_using_indexeslog_throttle_queries_not_using_indexes 參數設定為 ON 可能會影響 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
    

下一步