监视数据库性能

已完成

用于对数据库性能进行故障排除的故障排除技术的主要部分在 Azure SQL 中保持不变。

通常用于监视和故障排除 SQL Server 的所有工具也适用于在 Azure 虚拟机上运行的 SQL Server,包括性能监视器等工具。 但是,由于平台即服务 (PaaS) 的性质,Azure SQL Database 和 Azure SQL 托管实例提供了一套不同的工具。 接下来,我们将探索适合 Azure 的 PaaS 产品/服务的特定工具及其功能。

将性能结果与基线进行比较

建立基线的过程通常在实际的数据库迁移之前就开始了。 这涉及到收集一组全面的数据度量值,它们将反映数据库在其原始环境中的标准性能。 这些度量值可能包括但不限于 CPU 使用率、响应时间、事务速率和错误率。

此基线用作比较已迁移的数据库的性能的参考点。 但是,只有在迁移完成后,才会将此基线数据与已迁移的数据库的性能指标进行评估或比较。

迁移后,会监视和度量新数据库环境的性能。 然后,会将这些迁移后指标与迁移前基线进行比较,以确定任何差异或性能问题。 此比较有助于了解迁移是否对数据库性能产生了任何不利影响,或者是否存在需要优化以提高性能的领域。

自动优化

自动优化是一项功能,可以不断从你的工作负载中学习,识别潜在问题和改进,并根据查询存储数据提供建议。 它会适应由架构、索引修改或数据更新导致的执行计划更改。

可以使用 Azure 门户手动应用优化建议,也可以让自动优化自主为你应用优化建议。 在 Azure SQL 数据库中,它还可以通过优化索引来增强查询性能。

自动计划更正

借助查询存储,数据库引擎可以检测查询执行计划何时性能下降。 尽管你可通过用户界面手动识别下降的计划,但查询存储还提供自动通知你的选项。

Screenshot of the Query Store view for regressed plan correction.

在给定的示例中,计划 ID 1 旁边显示了一个检查标记,表明该计划是强制的。

启用自动优化后,数据库引擎将在以下条件下自动强制实施任何建议的查询执行计划:

  • 上一个计划的错误率超过建议计划的错误率
  • 估计 CPU 增益超过 10 秒
  • 强制计划优于上一个计划

当自动计划强制执行时,数据库引擎将应用最后一个良好的计划并监视其性能。 如果强制执行的计划的性能没有上一个计划好,则它会被取消强制执行,并会编译一个新计划。 如果其性能优于上一个计划,则它将保持强制状态,直到发生重新编译。

使用以下 T-SQL 查询启用自动计划更正。

ALTER DATABASE [WideWorldImporters] SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON);

可以通过动态管理视图 sys.dm_db_tuning_recommendations 查看自动优化建议。 此 DMV 提供建议详细信息、类型和状态。 要确认是否为数据库启用了自动优化,请查看视图 sys.database_automatic_tuning_options

Azure SQL 托管实例的自动优化仅支持 FORCE LAST GOOD PLAN

要启用自动优化通知,请参阅自动优化的电子邮件通知

自动索引管理

Azure SQL 数据库支持自动索引优化。 这意味着,随着时间的推移,数据库有能力了解现有的工作负载,并提供有关添加或删除索引的建议,以提高性能。 与强制改进的查询计划一样,数据库可以配置为允许根据现有索引性能自动创建或删除索引。

Screenshot of Automatic tuning Options for Azure SQL Database.

或者,使用以下查询查看数据库中已启用的自动优化功能。

SELECT name,
    desired_state_desc,
    actual_state_desc,
    reason_desc
FROM sys.database_automatic_tuning_options

索引创建需要大量资源,它的成功创建对于确保不对工作负载产生负面影响至关重要。

Azure SQL 数据库会监视自动实现新索引所需的资源,以防止性能降低。 优化操作将延迟到资源可用为止,例如,当现有工作负载所需的资源阻止创建索引时。

了解 Query Performance Insight

任何数据库性能优化任务的初始阶段都涉及查明资源最密集的查询。 在以前的 SQL Server 版本中,这需要广泛的跟踪和一组复杂的 SQL 脚本,使数据收集过程变得很费力。

识别有问题的查询

Azure SQL 数据库提供了名为“Query Performance Insight”的工具,管理员可以通过它快速识别成本高昂的查询。 可以在 Azure SQL 数据库的主窗格的“智能性能”部分下找到它。

Azure SQL 数据库中的 Query Performance Insight 提供三个筛选选项:针对长时间运行的查询、资源消耗量最大的查询(默认项)或自定义筛选器。 它会显示按所选资源排序的前五个查询,例如 CPU、数据 IO 或日志 IO。 可以通过选择下部网格中的行来深入了解各个查询。 每一行都标有与条形图中的颜色匹配的不同颜色。

Screenshot of Query Performance Insights dashboard from Azure portal.

与其他选项相比,自定义选项卡提供了更大的灵活性。 它允许使用影响数据可视化效果的多个下拉菜单对性能数据进行更定制化的检查。 关键指标包括 CPU日志 IO数据 IO内存,它们是以你的 Azure SQL 数据库服务层级和计算资源为上限的性能方面。

Screenshot of a custom dashboard in Query Performance Insight.

如果深入研究单个查询,可以看到查询 ID 和查询本身,以及查询聚合类型和关联的时段。

Screenshot of the details of Query ID 3204 in Query Performance Insight.

尽管 Query Performance Insight 不显示查询的执行计划,但可以快速识别该查询,并使用该信息从数据库的查询存储中提取计划。

警报

可以使用 Azure 门户为 Azure SQL 数据库中的数据库设置性能警报。 当特定指标(例如数据库大小或 CPU 使用率)达到阈值时,这些警报可以通过电子邮件通知你或调用 Webhook。

在 SQL 数据库和 SQL 托管实例之间设置警报的过程类似。 要为 Azure SQL 数据库设置性能警报,请导航到“监视”部分,然后选择“警报”。 需要在此处建立新的警报规则,定义条件并创建操作组。

有关 Azure SQL 托管实例警报的详细信息,请访问使用 Azure 门户为 Azure SQL 托管实例创建警报。 如果你对 Azure SQL 数据库感兴趣,请参阅使用 Azure 门户为 Azure SQL 数据库和 Azure Synapse Analytics 创建警报

Azure SQL Insights

Azure SQL Insights 通过提供交互式且随时可用的可视化效果来增强监视体验。 可以自定义遥测收集和频率,并将来自多个源的数据合并到单个监视体验中。 它还保留了一段时间内的一组指标,因此你能够调查过去可能遇到的性能问题。

重要

建议仅在迁移的数据库完全集成到生产环境后设置 Azure SQL Insights。 这可以防止该工具在迁移和测试阶段捕获干扰性数据。

要开始使用 SQL Insights,你需要一个专用虚拟机,用于监视和远程收集 SQL 服务器中的数据。 此专用虚拟机需要安装以下组件:

  • Azure Monitor 代理
  • 工作负载 Insights 扩展

此外,设置 SQL Insights 还需要以下组件。

监视配置文件 - 要监视的组服务器、实例或数据库。

Log Analytics 工作区 - 将 SQL 监视数据发送到的位置。

集合设置 - 可以自定义配置文件的数据收集。 默认设置涵盖大多数监视方案,通常不需要更改。

扩展的事件

扩展事件工具是一个可靠的监视系统,用于捕获详细的服务器和数据库活动。 可以应用筛选器来减少数据收集开销,并专注于特定的性能问题。 所有 Azure SQL 产品/服务都支持扩展事件。

虽然扩展事件的设置在 SQL Server、Azure SQL Database 和 Azure SQL 托管实例中类似,但本模块侧重于它们之间的差异,而不是设置过程教学。

下面是在 Azure SQL 数据库中配置扩展事件的一些主要差异:

  • Transact-SQL:在 SQL Server 上执行 CREATE EVENT SESSION 命令时,使用的是 ON SERVER 子句。 但在 Azure SQL 数据库上,使用的是 ON DATABASE 子句。 ON DATABASE 子句也适用于 ALTER EVENT SESSIONDROP EVENT SESSION Transact-SQL 命令。 Azure SQL 数据库仅支持数据库范围的会话。

  • 数据库范围的会话:扩展事件基于 Azure SQL 数据库中的单租户隔离模型。 一个数据库中的事件会话无法访问另一个数据库中的数据或事件。 无法在 master 数据库1的上下文中发出 CREATE EVENT SESSION 语句。

  • 存储:由于你无权访问数据库位于 Azure SQL 数据库中的服务器的文件系统,你可以配置存储帐户目标来存储扩展事件会话。