適用於 MySQL 的 Azure 資料庫中的慢速查詢記錄
適用於: 適用於 MySQL 的 Azure 資料庫 - 單一伺服器
重要
適用於 MySQL 的 Azure 資料庫單一伺服器位於淘汰路徑上。 強烈建議您升級至適用於 MySQL 的 Azure 資料庫彈性伺服器。 如需移轉至適用於 MySQL 的 Azure 資料庫彈性伺服器的詳細資訊,請參閱適用於 MySQL 的 Azure 資料庫單一伺服器會發生什麼事?
在適用於 MySQL 的 Azure 資料庫中,使用者可以使用慢速查詢記錄檔。 不支援存取交易記錄。 慢速查詢記錄檔可以用來找出效能瓶頸,以進行疑難排解。
如需 MySQL 慢速查詢記錄的詳細資訊,請參閱 MySQL 參考手冊的慢速查詢記錄章節。
在您的伺服器上啟用查詢存放區時,您可能會看到「CALL mysql.az_procedure_collect_wait_stats (900, 30);
」之類的查詢記錄在慢速查詢記錄中。 這是預期的行為,因為查詢存放區功能會收集查詢的相關統計資料。
設定慢速查詢記錄
預設會停用慢速查詢記錄。 若要加以啟用,請將 slow_query_log
設定為「開啟」。 這可使用 Azure 入口網站 或 Azure CLI 加以啟用。
您可以調整的其他參數包含:
- long_query_time:如果查詢所需的時間比記錄該查詢的 long_query_time (秒) 還要久。 預設值是 [10 秒]。
- log_slow_admin_statements:如果 ON 在寫入至 slow_query_log 的陳述式中包含 ALTER_TABLE 和 ANALYZE_TABLE 這類管理陳述式。
- log_queries_not_using_indexes:決定是否將未使用索引的查詢記錄至 slow_query_log
- log_throttle_queries_not_using_indexes:這個參數會限制可寫入至慢速查詢記錄的非索引查詢次數。 log_queries_not_using_indexes 設為 ON 時,這個參數會生效。
- log_output:如果為「檔案」,允許慢速查詢記錄同時寫入本機伺服器儲存體和 Azure 監視器診斷記錄。 如果為「無」,則慢速查詢記錄只會寫入 Azure 監視器診斷記錄。
重要
如果您的資料表未編製索引,將 log_queries_not_using_indexes
和 log_throttle_queries_not_using_indexes
參數設定為 ON 可能會影響 MySQL 的效能;因為對這些未編制索引的資料表執行的所有查詢都會寫入慢速查詢記錄。
如果您打算記錄長時間的慢速查詢,建議將 log_output
設定為「無」。 如果設為「檔案」,這些記錄會寫入本機伺服器儲存體,並可能影響 MySQL 效能。
如需慢速查詢記錄參數的完整描述,請參閱 MySQL 慢速查詢記錄文件。
存取慢速查詢記錄
在適用於 MySQL 的 Azure 資料庫中存取慢速查詢記錄的選項有兩個:本機伺服器儲存體或 Azure 監視器診斷記錄。 這是使用 log_output
參數來設定的。
針對本機伺服器儲存體,您可使用 Azure 入口網站或 Azure CLI 列出和下載慢速查詢記錄。 在 Azure 入口網站中,瀏覽至 Azure 入口網站中的伺服器。 在 [監視] 標題下方,選取 [伺服器記錄] 頁面。 如需 Azure CLI 的詳細資訊,請參閱使用 Azure CLI 設定和存取慢速查詢記錄。
Azure 監視器診斷記錄可讓您將慢速查詢記錄輸送至 Azure 監視器記錄 (Log Analytics)、Azure 儲存體或事件中樞。 如需詳細資訊,請參閱下方內容。
本機伺服器儲存體記錄保留
記錄到伺服器的本機儲存體時,記錄從其建立起最多可使用七天。 如果可用記錄的總大小超過 7 GB,則會刪除最舊的檔案,直到空間可用為止。伺服器記錄的 7 GB 儲存體限制是免費的,無法擴充。
記錄會每隔 24 小時或 7 GB 旋轉一次,先到者先用。
注意
上述記錄保留不適用於使用 Azure 監視器診斷記錄輸送的記錄。 您可以變更所發出資料接收器的保留期間 (例如,Azure 儲存體)。
診斷記錄
適用於 MySQL 的 Azure 資料庫會與 Azure 監視器診斷記錄整合。 在 MySQL 伺服器上啟用慢速查詢記錄後,您即可選擇將它們發出至 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_d |
傳送的資料列數目 |
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
,如果記錄超過 2048 個字元,將會遭到截斷。
分析 Azure 監視器記錄中的記錄
透過診斷記錄將慢速查詢記錄輸送至 Azure 監視器記錄後,您即可對慢速查詢執行進一步分析。 以下是可協助您開始使用的範例查詢。 務必以您的伺服器名稱更新以下內容。
特定伺服器上超過 10 秒的查詢
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
列出特定伺服器上的前 5 個最長查詢
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
依在特定伺服器上的最小、最大、平均和標準差査詢時間總結慢速査詢
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
繪製特定伺服器上的慢速查詢分佈
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
在所有已啟用診斷記錄的 MySQL 伺服器上顯示超過 10 秒的查詢
AzureDiagnostics | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s | where query_time_d > 10