適用於 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_TABLE
、ANALYZE_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_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