使用 Azure SQL 分析 (預覽) 監視 Azure SQL Database

適用於:Azure SQL Database、Azure SQL 受控執行個體

警告

Azure SQL 分析 (預覽) 可與 Azure 監視器整合,其中許多監視解決方案不再處於開發中狀態。 如需更多監視選項,請參閱 Azure SQL Database 和 Azure SQL 受控執行個體監視和效能微調 (英文)。

Azure SQL 分析 (預覽) 是一款進階雲端監視解決方案,可在單一檢視中大規模及跨多個訂閱監視所有 Azure SQL 資料庫的效能。 Azure SQL 分析會收集關鍵的效能計量,以視覺效果方式呈現,並有內建智慧功能可以執行效能疑難排解。

使用這些收集到的計量,您可以建立自訂監視規則與警示。 Azure SQL 分析可協助您找出應用程式堆疊中每個層級的問題。 Azure SQL 分析會使用 Azure 診斷計量與 Azure 監視器檢視,來呈現單一 Log Analytics 工作區中所有 Azure SQL 資料庫的相關資料。 Azure 監視器可協助您收集、相互關聯,並將結構化與非結構化資料視覺化。

連接的來源

Azure SQL 分析是僅限雲端的監視解決方案,支援所有 Azure SQL 資料庫診斷遙測的資料流。 因為 Azure SQL 分析不會使用代理程式連線至 Azure 監視器,所以不支援監視裝載於內部部署或虛擬機器中的 SQL Server。

連接的來源 支援 描述
診斷設定 Azure 會將 Azure 計量與記錄資料直接傳送至 Azure Monitor Logs。
Azure 儲存體帳戶 Azure 監視器不會從儲存體帳戶讀取資料。
Windows 代理程式 Azure SQL 分析不會使用直接 Windows 代理程式。
Linux 代理程式 No Azure SQL 分析不會使用直接 Linux 代理程式。
System Center Operations Manager 管理群組 No Azure SQL 分析不會從 Operations Manager 代理程式直接連線至 Azure 監視器。

Azure SQL 分析選項

下表概述兩個 Azure SQL 分析儀表板版本所支援的選項,一個適用於 Azure SQL Database,另一個適用於 Azure SQL 受控執行個體資料庫。

Azure SQL 分析選項 描述 SQL Database 支援 SQL 受控執行個體支援
資源 (依類型) 可計算所有受監視資源的檢視方塊。 Yes Yes
深入解析 可透過階層的方式,向下鑽研至 Intelligent Insights 乃至效能。 Yes
錯誤 可透過階層的方式,向下鑽研至資料庫上發生的 SQL 錯誤。
逾時 可透過階層的方式,向下鑽研至資料庫上發生的 SQL 逾時。
封鎖 可透過階層的方式,向下鑽研至資料庫上發生的 SQL 封鎖。
資料庫等候 可透過階層的方式,向下鑽研至資料庫層級的 SQL 等候統計資料。 包含總等候時間及每種等候類型等候時間的摘要。
查詢持續時間 可透過階層的方式,向下鑽研至查詢執行統計資料,例如查詢持續時間、CPU 使用量、資料 IO 使用量、記錄 IO 使用量。
查詢等候 可透過階層的方式,依等候類別,向下鑽研至查詢等候統計資料。 Yes

設定 Azure SQL 分析 (預覽)

使用從方案庫新增 Azure 監視器解決方案中所述的程序,將 Azure SQL 分析 (預覽) 新增至 Log Analytics 工作區。

設定 Azure SQL Database 以串流診斷遙測

在您於工作區中建立 Azure SQL 分析解決方案之後,您必須設定每個想要監視的資源,以將其診斷遙測串流至 Azure SQL 分析。 遵循此頁面上的詳細指示:

上述頁面同時提供啟用支援將單一 Azure SQL 分析工作區作為單一窗口來監視多個 Azure 訂用帳戶的操作指示。

使用 Azure SQL 分析 (預覽)

從 Log Analytics 工作區的 [ 舊版解決方案 ] 頁面流覽至您的 SQL 分析部署。

Azure SQL Analytics 提供兩個不同的檢視:一個用於監視 SQL Database,另一個用於監視 SQL 受控執行個體。

檢視 Azure SQL 分析資料

儀表板包含透過不同檢視方塊監視之所有資料庫的概觀。 若要讓不同的檢視方塊運作,您必須在要串流至 Log Analytics 工作區的 SQL 資源上,啟用適當的計量或記錄。

若某些計量或記錄未串流至 Azure 監視器,就不會將 Azure SQL 分析中的磚填入監視資訊。

SQL Database 檢視

選取適用於資料庫的 [Azure SQL 分析] 圖格後,便會顯示監視儀表板。

顯示監視儀表板的螢幕擷取畫面。

選取任何磚,以便在特定的檢視方塊中開啟向下鑽研報表。 一旦選取檢視方塊,向下鑽研報表隨即開啟。

螢幕擷取畫面,其中顯示將報告向下鑽研至特定檢視方塊。

此檢視中的每個檢視方塊都會提供訂閱、伺服器、彈性集區與資料庫層級的摘要。 此外,每個檢視方塊都會在右側顯示檢視方塊專屬的報表。 從清單中選取訂用帳戶、伺服器、集區或資料庫可繼續往下鑽研。

SQL 受控執行個體檢視

選取適用於資料庫的 [Azure SQL 分析] 圖格後,便會顯示監視儀表板。

Azure SQL 分析概觀

選取任何磚,以便在特定的檢視方塊中開啟向下鑽研報表。 一旦選取檢視方塊,向下鑽研報表隨即開啟。

選取 [SQL 受控執行個體] 檢視會顯示執行個體使用量的詳細資料、執行個體資料庫,以及跨受控執行個體所執行的查詢遙測。

Azure SQL 分析逾時

Intelligent Insights 報表

Azure SQL Database Intelligent Insights 可讓您了解所有 Azure SQL 資料庫的效能情況。 收集的所有 Intelligent Insights 都可以透過 Insights 檢視方塊視覺化及存取。

Azure SQL 分析見解

彈性集區與資料庫報告

彈性集區與資料庫都有自己的特定報告,可顯示在指定時間內針對資源收集的所有資料。

Azure SQL 分析資料庫

Azure SQL 彈性集區

查詢報表

您可以透過查詢持續時間與查詢等候檢視方塊,將任何查詢的效能透過查詢報告相互關聯。 此報表會比較不同資料庫上的查詢效能,並可讓您輕鬆地找出所選查詢執行速度良好與緩慢的資料庫。

Azure SQL 分析查詢

權限

若要使用 Azure SQL 分析 (預覽),使用者必須至少在 Azure 中獲授與「讀取者」角色權限。 不過此角色並無法讓使用者取得觀看查詢文字,或執行任何自動調整動作的權限。 Azure 中可讓您取得最完整 Azure SQL 分析使用權限的角色為擁有者、參與者、SQL DB 參與者,以及 SQL Server 參與者。 您也可能會考慮在入口網站中建立自訂角色,並將使用權限設定為僅限 Azure SQL 分析,不可存取管理其他資源。

在入口網站中建立自訂角色

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要瞭解如何遷移至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 遷移至 Az。

我們了解到某些組織會在 Azure 中施行嚴格的權限控制,因此請參閱下列 PowerShell 指令碼,其可以在 Azure 入口網站中建立自訂角色「SQL 分析監視操作員」,此角色僅擁有使用完整 Azure SQL 分析所需的讀取與寫入最低權限。

在下列指令碼中,請以您的 Azure 訂閱識別碼取代 "{SubscriptionId}",接著以「擁有者」或「參與者」角色登入 Azure 並執行指令碼。

 Connect-AzAccount
 Select-AzSubscription {SubscriptionId}
 $role = Get-AzRoleDefinition -Name Reader
 $role.Name = "SQL Analytics Monitoring Operator"
 $role.Description = "Lets you monitor database performance with Azure SQL Analytics as a reader. Does not allow change of resources."
 $role.IsCustom = $true
 $role.Actions.Add("Microsoft.SQL/servers/databases/read");
 $role.Actions.Add("Microsoft.SQL/servers/databases/topQueries/queryText/*");
 $role.Actions.Add("Microsoft.Sql/servers/databases/advisors/read");
 $role.Actions.Add("Microsoft.Sql/servers/databases/advisors/write");
 $role.Actions.Add("Microsoft.Sql/servers/databases/advisors/recommendedActions/read");
 $role.Actions.Add("Microsoft.Sql/servers/databases/advisors/recommendedActions/write");
 $role.Actions.Add("Microsoft.Sql/servers/databases/automaticTuning/read");
 $role.Actions.Add("Microsoft.Sql/servers/databases/automaticTuning/write");
 $role.Actions.Add("Microsoft.Sql/servers/advisors/read");
 $role.Actions.Add("Microsoft.Sql/servers/advisors/write");
 $role.Actions.Add("Microsoft.Sql/servers/advisors/recommendedActions/read");
 $role.Actions.Add("Microsoft.Sql/servers/advisors/recommendedActions/write");
 $role.Actions.Add("Microsoft.Resources/deployments/write");
 $role.AssignableScopes = "/subscriptions/{SubscriptionId}"
 New-AzRoleDefinition $role

新角色建立後,請將這個角色指派給需要 Azure SQL 分析使用權限的每一位使用者。

分析資料並建立警示

Azure SQL 分析中的資料分析以 Log Analytics 語言為基礎,提供您自訂查詢和報告功能。 請參閱可用的計量和記錄,內有針對收集自資料庫資源可自訂查詢的資料的說明。

Azure SQL 分析中的自動化警示以寫入的 Log Analytics 查詢為基礎,一旦符合條件,該查詢便會觸發警示。 以下請參考數個可在 Azure SQL 分析中設定警示的 Log Analytics 查詢範例。

建立 Azure SQL Database 的警示

您可以使用來自 Azure SQL Database 資源的資料,輕鬆建立警示。 以下是您可以搭配記錄警示使用的一些實用記錄查詢

高 CPU

AzureMetrics
| where ResourceProvider=="MICROSOFT.SQL"
| where ResourceId contains "/DATABASES/"
| where MetricName=="cpu_percent"
| summarize AggregatedValue = max(Maximum) by bin(TimeGenerated, 5m)
| render timechart

注意

  • 設定此警示的預先需求是,受監視的資料庫串流基本計量至 Azure SQL 分析使用的 Log Analytics 工作區。
  • dtu_consumption_percent 取代 MetricName 值 cpu_percent,以改為取得高 DTU 結果。

彈性集區的高 CPU

AzureMetrics
| where ResourceProvider=="MICROSOFT.SQL"
| where ResourceId contains "/ELASTICPOOLS/"
| where MetricName=="cpu_percent"
| summarize AggregatedValue = max(Maximum) by bin(TimeGenerated, 5m)
| render timechart

注意

  • 設定此警示的預先需求是,受監視的資料庫串流基本計量至 Azure SQL 分析使用的 Log Analytics 工作區。
  • dtu_consumption_percent 取代 MetricName 值 cpu_percent,以改為取得高 DTU 結果。

過去 1 小時的平均儲存體高於 95%

let time_range = 1h;
let storage_threshold = 95;
AzureMetrics
| where ResourceId contains "/DATABASES/"
| where MetricName == "storage_percent"
| summarize max_storage = max(Average) by ResourceId, bin(TimeGenerated, time_range)
| where max_storage > storage_threshold
| distinct ResourceId

注意

  • 設定此警示的預先需求是,受監視的資料庫串流基本計量至 Azure SQL 分析使用的 Log Analytics 工作區。
  • 此查詢需要將警示規則設定為當有查詢結果 (> 0 個結果) 時引發警示,這表示某些資料庫上有此情況。 該輸出會列出所定義 time_range 內高於 storage_threshold 的資料庫資源。
  • 該輸出會列出所定義 time_range 內高於 storage_threshold 的資料庫資源。

針對 Intelligent insights 的警示

重要

若資料庫執行良好,且未產生 Intelligent Insights,則此查詢將會失敗,並出現錯誤訊息:無法解析名為 rootCauseAnalysis_s 的純量運算式。 此行為預期會發生在所有沒有資料庫 Intelligent Insights 的情況下。

let alert_run_interval = 1h;
let insights_string = "hitting its CPU limits";
AzureDiagnostics
| where Category == "SQLInsights" and status_s == "Active"
| where TimeGenerated > ago(alert_run_interval)
| where rootCauseAnalysis_s contains insights_string
| distinct ResourceId

注意

  • 設定此警示的預先需求是,受監視的資料庫串流 SQLInsights 診斷記錄至 Azure SQL 分析使用的 Log Analytics 工作區。
  • 此查詢需要將警示規則設定為利用與 alert_run_interval 相同的頻率來執行,以避免產生重複結果。 請將此規則設定為當有查詢結果 (> 0 個結果) 時引發警示。
  • 自訂 alert_run_interval 來指定時間範圍,以檢查設定為會將 SQLInsights 記錄串流至 Azure SQL 分析的資料庫上是否發生此情況。
  • 自訂 insights_string 以擷取深入解析根本原因分析文字的輸出。 相同文字會在可從現有見解使用的 Azure SQL 分析中顯示。 或者,您也可以使用下列查詢來查看訂用帳戶所產生的所有深入解析文字。 請使用查詢的輸出來搜集可供對深入解析設定警示的不同字串。
AzureDiagnostics
| where Category == "SQLInsights" and status_s == "Active"
| distinct rootCauseAnalysis_s

建立 SQL 受控執行個體的警示

儲存體高於 90%

let storage_percentage_threshold = 90;
AzureDiagnostics
| where Category =="ResourceUsageStats"
| summarize (TimeGenerated, calculated_storage_percentage) = arg_max(TimeGenerated, todouble(storage_space_used_mb_s) *100 / todouble (reserved_storage_mb_s))
   by ResourceId
| where calculated_storage_percentage > storage_percentage_threshold

注意

  • 設定此警示的預先需求是,受監視的受控執行個體在 Azure SQL 分析使用的 Log Analytics 工作區,啟用 ResourceUsageStats 記錄串流。
  • 此查詢需要將警示規則設定為當有查詢結果 (> 0 個結果) 時引發警示,這表示受控執行個體上有此情況。 輸出是受控執行個體上的儲存體耗用量百分比。

過去 1 小時的 CPU 平均耗用量高於 95%

let cpu_percentage_threshold = 95;
let time_threshold = ago(1h);
AzureDiagnostics
| where Category == "ResourceUsageStats" and TimeGenerated > time_threshold
| summarize avg_cpu = max(todouble(avg_cpu_percent_s)) by ResourceId
| where avg_cpu > cpu_percentage_threshold

注意

  • 設定此警示的預先需求是,受監視的受控執行個體在 Azure SQL 分析使用的 Log Analytics 工作區,啟用 ResourceUsageStats 記錄串流。
  • 此查詢需要將警示規則設定為當有查詢結果 (> 0 個結果) 時引發警示,這表示受控執行個體上有此情況。 輸出是受控執行個體上在定義期間中的平均 CPU 使用率百分比耗用量。

定價

雖然可免費使用 Azure SQL 分析,但診斷遙測的耗用量若超過每個月所配置的免費資料擷取單位則需付費,請參閱 Log Analytics 定價。 所提供的免費資料擷取單位可讓您每個月免費監視多個資料庫。 相較於閒置的資料庫,較繁重工作負載的更多作用中資料庫會擷取更多資料。 您可以藉由選取 Azure SQL 分析導覽功能表上的 [OMS 工作區],然後選取 [Usage and Estimated Costs] \(使用量與估計成本\) 來輕鬆地監視 Azure SQL 分析中的資料擷取耗用量。

下一步