Azure VM 上适用于 SQL Server 的 SQL 最佳做法评估

适用于:Azure VM 上的 SQL Server

Azure 门户的 SQL 最佳做法评估功能可以识别可能的性能问题,并使用 SQL 评估 API 提供的丰富规则集来评估 Azure 虚拟机 (VM) 上的 SQL Server 是否配置为遵循最佳做法。

概述

启用 SQL 最佳做法评估功能后,系统会扫描 SQL Server 实例和数据库,以提供有关索引、已弃用功能、已启用或缺失的跟踪标志、统计信息等方面的建议。建议显示在 Azure 门户SQL VM 管理页上。

使用 Azure Monitor 代理 (AMA) 将评估结果上传到 Log Analytics 工作区。 如果尚未安装 AMA 扩展,则会将该扩展安装到 SQL Server VM,同时创建 DCEDCR 等 AMA 资源并将其连接到指定的 Log Analytics 工作区。

评估运行时间取决于环境(数据库、对象等的数量),持续时间从几分钟到一个小时不等。 同样,评估结果的大小也取决于环境。 评估针对实例以及该实例上的所有数据库运行。 在测试中,我们观察到评估运行对计算机具有高达 5-10% 的 CPU 影响。 在这些测试中,评估是在类似 TPC-C 的应用程序针对 SQL Server 运行时执行。

先决条件

若要使用 SQL 最佳做法评估功能,必须满足以下先决条件:

权限

若要启用 SQL 最佳做法评估,需要以下权限:

启用

可以使用 Azure 门户或 Azure CLI 启用 SQL 最佳做法评估。

若要使用 Azure 门户启用 SQL 最佳做法评估,请执行以下步骤:

  1. 登录到 Azure 门户并转到你的 SQL 虚拟机
  2. “设置”中,选择 SQL 最佳做法评估
  3. 选择“启用 SQL 最佳做法评估”“配置”以导航到“配置”页。
  4. 选中“启用 SQL 最佳做法评估”框并提供以下信息:
    1. 评估结果要上传到的 Log Analytics 工作区。 从下拉列表中选择订阅中的现有工作区。
    2. 选择将在其中创建 Azure Monitor 代理资源 DCEDCR 的资源组。 如果跨多个 SQL Server VM 指定同一资源组,则会重复使用这些资源。
    3. 运行计划。 可以选择按需或按计划自动运行评估。 如果选择计划,请提供频率(每周或每月)、星期几、重复间隔(每隔 1-6 周),以及评估开始时间(VM 本地时间)。
  5. 选择“应用”以保存更改,并将 Azure Monitor 代理部署到 SQL Server VM(如果尚未部署)。 在 SQL 最佳做法评估功能可用于 SQL Server VM 后,Azure 门户会显示通知。

评估 SQL Server VM

评估可按以下方式运行:

  • 制定计划时
  • 按需

运行计划的评估

可以使用 Azure 门户和 Azure CLI 按计划配置评估。

如果在配置窗格中设置了计划,则将在指定的日期和时间自动运行评估。 选择“配置”可修改评估计划。 提供新计划后,以前的计划将被覆盖。

运行按需评估

为 SQL Server VM 启用 SQL 最佳做法评估功能后,可以使用 Azure 门户或 Azure CLI 按需运行评估。

若要使用 Azure 门户运行按需评估,请从 Azure 门户 的“SQL 虚拟机”资源页面的 SQL 最佳做法评估窗格中选择“运行评估”

查看结果

“SQL 最佳做法评估”页的“评估结果”部分显示最近的评估运行列表。 每行显示运行的开始时间和状态 - 已计划、正在运行、正在上传结果、已完成或失败。 每个评估运行包括两个部分:评估实例,将结果上传到 Log Analytics 工作区。 状态字段涵盖了这两个部分。 评估结果显示在 Azure 工作簿中。

可通过三种方式访问评估结果 Azure 工作簿:

  • “SQL 最佳做法评估”页上选择“查看最新的成功评估”按钮
  • “SQL 最佳做法评估”页的“评估结果”部分选择已完成的运行。
  • 从 SQL VM 资源页的“概述”页上显示的“前 10 条建议”中选择“查看评估结果” 。

打开工作簿后,可以使用下拉列表选择以前的运行。 可以使用“结果”页查看单个运行的结果,或使用“趋势”页查看历史趋势 。

结果页

“结果”页使用以下选项卡来组织建议:

  • “全部”:当前运行中的所有建议
  • “新增”:新建议(前一次运行的增量)
  • “已解决”:上一次运行中已解决的建议
  • “见解”:列出最经常出现的问题以及问题最多的数据库。

图形按不同的严重性类别(高、中、低)将评估结果和信息分组。 选择每个类别以查看建议列表,或者在搜索框中搜索关键短语。 最好从严重性最高的建议开始,然后在列表中查看后面的建议。

第一个网格显示每个建议,以及遇到该问题的环境中的实例数。 选择第一个网格中的行时,第二个网格将列出该特定建议的所有实例。 如果第一个网格中未选择任何内容,则第二个网格将显示所有建议,这可能是一个很长的列表。 可以使用网格上方的下拉列表 (名称、严重性、标记、检查 ID) 筛选结果。 还可使用“导出到 Excel”,选择每个网格右上角的小图标,在“日志视图”选项中打开最后一个运行查询

图形的“已通过”部分列出系统已遵循的建议。

通过选择“消息”字段查看每条建议的详细信息,例如长说明和相关联机资源。

“趋势”页上提供三个图表用于显示一段时间的变化:所有问题、新问题和已解决的问题。 图表可帮助你查看进度。 理想情况下,建议的数量应会减少,而已解决的问题数量应会增加。 图例显示每个严重性级别的平均问题数。 将鼠标悬停在条形上可查看每个运行的各项值。

如果在一天中完成了多个运行,则“趋势”页上的图形只会包含最新的运行。

为订阅中的所有 VM 启用

可以使用 Azure CLI 在订阅中的所有 SQL Server VM 上启用 SQL 最佳做法评估功能。 为此,请使用以下示例脚本:

# This script is formatted for use with Az CLI on Windows PowerShell. You may need to update the script for use with Az CLI on other shells.
# This script enables SQL best practices assessment feature for all SQL Servers on Azure VMs in a given subscription. It configures the VMs to use a Log Analytics workspace to upload assessment results. It sets a schedule to start an assessment run every Sunday at 11pm (local VM time).
# Please note that if a VM is already associated with another Log Analytics workspace, it will give an error.
 
$subscriptionId = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
# Resource Group where the Log Analytics workspace belongs
$myWsRg = 'myWsRg'
# Log Analytics workspace where assessment results will be stored
$myWsName = 'myWsName'
# Resource Group where the Azure Monitor Agent resources will be created
$myAgentRg = 'myAgentRg'
 
# Ensure in correct subscription
az account set --subscription $subscriptionId
 
$sqlvms = az sql vm list | ConvertFrom-Json 
 
foreach ($sqlvm in $sqlvms)
{
  echo "Configuring feature on $($sqlvm.id)"
  az sql vm update --assessment-weekly-interval 1 --assessment-day-of-week Sunday --assessment-start-time-local "23:00" --workspace-name $myWsName --workspace-rg $myWsRg -g $sqlvm.resourceGroup --agent-rg $myAgentRg -n $sqlvm.name
  
  # Alternatively you can use this command to only enable the feature without setting a schedule
  # az sql vm update --enable-assessment true --workspace-name $myWsName --workspace-rg $myWsRg -g $sqlvm.resourceGroup --agent-rg $myAgentRg -n $sqlvm.name  
 
  # You can use this command to start an on-demand assessment on each VM
  # az sql vm start-assessment -g $sqlvm.resourceGroup -n $sqlvm.name
}

已知问题

使用 SQL 最佳做法评估时,可能会遇到以下已知问题。

迁移到 Azure Monitor 代理 (AMA)

以前,SQL 最佳做法评估功能使用 Microsoft Monitoring Agent (MMA) 将评估上传到 Log Analytics 工作区。 Microsoft Monitoring Agent 已替换为 Azure Monitor 代理 (AMA)。 若要将现有的 SQL 最佳做法评估从 MMA 迁移到 AMA,必须删除 SQL Server VM,然后再次向扩展注册 SQL Server VM。 启用评估后,现有结果仍将可用。 如果 MMA 未被其他服务使用,则可以将其删除。 在迁移之前,请确保 SQL Server VM 部署所在的区域支持 Azure Monitor Log Analytics。

无法启用评估

请参阅包含 SQL VM 的资源组的部署历史记录,以查看与失败操作关联的错误消息。

无法运行评估

在 Azure 门户中检查评估运行的状态。 如果状态失败,请选择状态以查看错误消息。 还可以登录到 VM 并查看 C:\WindowsAzure\Logs\Plugins\Microsoft.SqlServer.Management.SqlIaaSAgent\2.0.X.Y 处的扩展日志中失败评估的详细错误消息,其中 2.0.X.Y 是扩展的版本。

如果你在运行评估时遇到问题:

  • 确保你的环境满足所有先决条件
  • 确保 SQL IaaS 代理服务在 VM 上运行,并且 SQL IaaS 代理扩展处于正常运行状态。 如果 SQL IaaS 代理扩展运行不正常,请修复该扩展以解决任何问题,并将其升级到最新版本,而不会造成任何 SQL Server 停机。
  • 如果你看到 NT SERVICE\SqlIaaSExtensionQuery 出现任何登录失败,请确保此帐户已存在于 SQL Server 中并且具有 Server permission - CONTROL SERVER 权限。

将结果上传到 Log Analytics 工作区失败

此错误表明 Microsoft Monitoring Agent (MMA) 无法在预期时间期限内上传结果。

如果结果无法上传到 Log Analytics 工作区,请尝试以下操作:

使用 Log Analytics 的 TLS 配置不正确的错误

最常见的 TLS 错误发生在 Microsoft Monitoring Agent (MMA) 扩展在连接到 Log Analytics 终结点时无法建立 SSL 握手时,这通常发生在注册表或 GPO 在操作系统级别强制执行 TLS 1.0,但没有为 .NET Framework 更新时。 如果已在 Windows 中强制实施 TLS 1.0 或更高版本,并已按特定于 Schannel 的注册表项所述禁用了旧式 SSL 协议,则还需要确保 .NET Framework 已配置为使用强加密

配置 SQL 评估后无法更改 Log Analytics 工作区

VM 与 Log Analytics 工作区关联后,将无法从 SQL 虚拟机资源进行更改。 这是为了防止 Log Analytics 用于其他用例。 可以在 Azure 门户的“虚拟机”页面上使用 Log Analytics 资源边栏选项卡断开 VM 的连接。

由于 Log Analytics 工作区数据保留,结果已过期

这表示结果不再基于保留策略保留在 Log Analytics 工作区中。 可以更改工作区的保留期。