适用于: Azure SQL 数据库、Azure SQL 托管实例
谨慎
Azure SQL Analytics(预览版)是与 Azure Monitor 的集成,其中许多监视解决方案不再处于活动开发状态。 有关更多监视选项,请参阅 Azure SQL 数据库和 Azure SQL 托管实例中的监视和性能优化。
Azure SQL Analytics(预览版)是一种高级云监视解决方案,用于监视单个视图中所有 Azure SQL 数据库的性能以及跨多个订阅的性能。 Azure SQL Analytics 使用内置的智能收集和直观显示关键性能指标,以进行性能故障排除。
通过使用这些收集的指标,可以创建自定义监视规则和警报。 Azure SQL Analytics 可帮助你识别应用程序堆栈的每个层的问题。 Azure SQL Analytics 使用 Azure 诊断 指标以及 Azure Monitor 视图来显示单个 Log Analytics 工作区中所有 Azure SQL 数据库的数据。 Azure Monitor 可帮助你收集、关联和可视化结构化和非结构化数据。
连接的源
Azure SQL Analytics 是一种仅限云的监视解决方案,支持为所有 Azure SQL 数据库流式传输诊断遥测数据。 由于 Azure SQL Analytics 不使用代理连接到 Azure Monitor,因此它不支持监视本地或虚拟机中托管的 SQL Server。
连接的源 | 已支持 | DESCRIPTION |
---|---|---|
诊断设置 | 是 | Azure 指标和日志数据由 Azure 直接发送到 Azure Monitor 日志。 |
Azure 存储帐户 | 否 | Azure Monitor 不会从存储帐户读取数据。 |
Windows 软件代理 | 否 | Azure SQL Analytics 不使用直接 Windows 代理。 |
Linux 代理 | 否 | Azure SQL Analytics 不使用直接 Linux 代理。 |
System Center Operations Manager (系统中心操作管理器) 管理组 | 否 | Azure SQL Analytics 不使用从 Operations Manager 代理到 Azure Monitor 的直接连接。 |
Azure SQL Analytics 选项
下表概述了两个版本的 Azure SQL Analytics 仪表板支持的选项,一个用于 Azure SQL 数据库,另一个用于 Azure SQL 托管实例数据库。
Azure SQL Analytics 选项 | DESCRIPTION | SQL 数据库支持 | SQL 托管实例支持 |
---|---|---|---|
按类型排序的资源 | 计算受监视的所有资源的透视。 | 是的 | 是的 |
洞见 | 提供对性能相关的 Intelligent Insights 的分层深入了解。 | 是的 | 是的 |
错误 | 提供对数据库上发生的 SQL 错误的分层向下钻取。 | 是的 | 是的 |
超时 | 提供对数据库中发生的 SQL 超时的分层分析。 | 是的 | 否 |
封锁 | 提供对数据库上发生的 SQL 阻塞的分层向下钻取。 | 是的 | 否 |
数据库等待 | 提供对数据库级别的 SQL 等待统计信息的分层向下钻取。 包括总等待时间和每个等待类型的等待时间的摘要。 | 是的 | 否 |
查询持续时间 | 提供对查询执行统计信息的分层向下钻取,例如查询持续时间、CPU 使用率、数据 IO 使用情况、日志 IO 使用情况。 | 是的 | 是的 |
查询等待 | 按等待类别提供对查询等待统计信息的分层深入分析。 | 是的 | 是的 |
Azure SQL Analytics 的配置(预览版)
使用 解决方案库中的“添加 Azure Monitor 解决方案 ”中所述的过程将 Azure SQL Analytics(预览版)添加到 Log Analytics 工作区。
配置 Azure SQL 数据库以流式传输诊断遥测数据
在工作区中创建 Azure SQL Analytics 解决方案后,您需要配置希望监控的每个资源,以传输其诊断遥测数据到 Azure SQL Analytics。 按照此页上的详细说明作:
- 为数据库启用 Azure 诊断,将诊断数据流式传输到 Azure SQL 分析平台。
上一页还提供了有关如何将单个 Azure SQL Analytics 工作区中的多个 Azure 订阅作为单一窗格监视的支持的说明。
使用 Azure SQL Analytics (预览版)
从 Log Analytics 工作区的 “传统解决方案”页导航到 SQL Analytics 部署。
Azure SQL Analytics 提供了两个单独的视图:一个用于监视 SQL 数据库,另一个用于监视 SQL 托管实例的视图。
查看 Azure SQL Analytics 数据
仪表板包括通过不同角度监视的所有数据库的概述。 若要使不同的透视正常工作,必须在 SQL 资源上启用适当的指标或日志才能流式传输到 Log Analytics 工作区。
如果某些指标或日志未流式传输到 Azure Monitor,则 Azure SQL Analytics 中的磁贴不会填充监视信息。
SQL 数据库视图
选择数据库的 Azure SQL Analytics 磁贴后,会显示监视仪表板。
选择任何磁贴,将向下钻取报表打开到特定透视中。 选择透视后,将打开向下钻取报表。
此视图中的每一个透视都提供订阅、服务器、弹性池和数据库级别的摘要。 此外,每个视图都展示了与右侧报告特定相关的视角。 从列表中选择订阅、服务器、池或数据库会继续深入探索。
SQL 托管实例视图
选择数据库的 Azure SQL Analytics 磁贴后,会显示监视仪表板。
选择任意磁贴,即会打开一个细化报表,深入到特定视角。 选择透视后,将打开向下钻取报表。
选择“SQL 托管实例”视图,显示有关跨托管实例执行的查询的实例利用率、实例数据库和遥测的详细信息。
智能洞察报告
Azure SQL 数据库 Intelligent Insights 可让你了解所有 Azure SQL 数据库的性能正在发生的情况。 通过 Insights 视图可以可视化和访问收集的所有智能洞察。
弹性池和数据库报告
弹性池和数据库都有其自己的特定报表,用于显示指定时间为资源收集的数据。
查询报表
通过查询时长和查询等待时间的透视,您可以在查询报表中将任何查询的性能关联起来。 此报表比较不同数据库的查询性能,并可轻松确定执行所选查询的数据库与速度较慢的数据库。
权限
若要使用 Azure SQL Analytics(预览版),需要向用户授予 Azure 中读取者角色的最低权限。 但是,此角色不允许用户查看查询文本或执行任何自动优化作。 在 Azure 中,可以充分使用 Azure SQL Analytics 的更宽松角色包括所有者、参与者、SQL DB 参与者或 SQL Server 参与者。 还可能需要考虑在门户中创建自定义角色,该角色具有仅使用 Azure SQL Analytics 所需的特定权限,并且无权管理其他资源。
在门户中创建自定义角色
注释
建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az。
认识到某些组织在 Azure 中强制实施严格的权限控制,请查找以下 PowerShell 脚本,以便在 Azure 门户中创建自定义角色“SQL Analytics 监视作员”,并具有使用 Azure SQL Analytics 最充分所需的最小读取和写入权限。
将以下脚本中的“{SubscriptionId}”替换为 Azure 订阅 ID,并在 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 Analytics 的每个用户。
分析数据并创建警报
Azure SQL Analytics 中的数据分析基于 Log Analytics 语言 进行自定义查询和报告。 查找从数据库资源收集的可用数据的说明,以便在 可用的指标和日志中进行自定义查询。
Azure SQL Analytics 中的自动警报基于编写 Log Analytics 查询,以在满足条件时触发警报。 在 Log Analytics 查询中查找以下几个示例,可以在 Azure SQL Analytics 中设置警报。
为 Azure SQL 数据库创建警报
可以使用来自 Azure SQL 数据库资源的数据轻松 创建警报 。 下面是可用于日志警报的一些有用的 日志查询 :
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 Analytics 使用的 Log Analytics 工作区。
- 将 MetricName 值
cpu_percent
替换为dtu_consumption_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 Analytics 使用的 Log Analytics 工作区。
- 将 MetricName 值
cpu_percent
替换为dtu_consumption_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 Analytics 使用的 Log Analytics 工作区。
- 此查询要求设置警报规则,以在查询中存在结果(> 0 个结果)时触发警报,该规则表示某些数据库中存在该条件。 输出是位于
time_range
内且超过storage_threshold
的数据库资源列表。 - 输出是列表,它显示的是在
time_range
中定义的超出storage_threshold
的数据库资源。
智能洞察警报
重要
如果数据库性能良好,并且尚未生成 Intelligent Insights,则此查询将失败并显示错误消息:无法解析命名 rootCauseAnalysis_s
的标量表达式。 在所有数据库不存在智能洞察的情况下,预期会出现这种行为。
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 Analytics 使用的 Log Analytics 工作区。
- 此查询需要设置一个警报规则,使其以与
alert_run_interval
相同的频率运行,以避免结果重复。 规则应设置为在查询中存在结果(> 0 个结果)时触发警报。 - 自定义
alert_run_interval
以指定时间范围,从而检查是否在配置为将 SQLInsights 日志流式传输到 Azure SQL Analytics 的数据库上发生了相关条件。 - 自定义 insights_string 以获取 Insights 根本原因分析文本的输出。 这是显示在 Azure SQL Analytics 用户界面中的相同文本,您可以从现有洞察中使用。 或者,可以使用下面的查询查看订阅上生成的所有 Insights 的文本。 使用查询的输出来获取用于在 Insights 上设置警报的不同字符串。
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
注释
- 设置此警报的先决条件是,受监视的托管实例已将 ResourceUsageStats 日志流式传输到 Azure SQL Analytics 使用的 Log Analytics 工作区。
- 此查询要求设置警报规则,以在查询中存在结果(> 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
注释
- 设置此警报的先决条件是,受监视的托管实例已将 ResourceUsageStats 日志流式传输到 Azure SQL Analytics 使用的 Log Analytics 工作区。
- 此查询要求设置警报规则,以在查询中存在结果(> 0 个结果)时触发警报,该规则表示该条件存在于托管实例上。 输出是托管实例上定义的时间段内的平均 CPU 使用率百分比消耗量。
定价
虽然 Azure SQL Analytics(预览版)是免费提供的,但对于每月分配的免费数据引入单元以上的诊断遥测消费,将会收取费用,详情请参阅 Log Analytics 定价。 提供的免费数据引入单元每月可以免费监视多个数据库。 相比空闲数据库,工作负荷较重的活跃数据库会引入更多数据。 可以通过在 Azure SQL Analytics 的导航菜单上选择 OMS 工作区,然后选择“使用情况”和“估计成本”,轻松监视 Azure SQL Analytics 中的数据引入消耗量。
后续步骤
- 使用 Azure Monitor 中的 日志查询 查看详细的 Azure SQL 数据。
- 创建自己的仪表板 ,其中显示了 Azure SQL 数据。
- 在特定 Azure SQL 事件发生时创建警报。
- 使用 Azure Monitor 监视 Azure SQL 数据库
- 使用 Azure Monitor 监视 Azure SQL 托管实例