监视数据库性能
用于对数据库性能进行故障排除的主要故障排除技术在 Azure SQL 中保持不变。
通常用于监视和故障排除 SQL Server 的所有工具也适用于在 Azure 虚拟机上运行的 SQL Server,包括性能监视器等工具。 但是,由于平台即服务(PaaS)的性质,Azure SQL 数据库和 Azure SQL 托管实例提供了一组不同的工具。 接下来,我们将探讨 Azure PaaS 产品/服务的特定工具及其功能。
将性能结果与基线进行比较
建立基线的过程通常在实际数据库迁移之前良好开始。 这涉及到收集一组全面的数据度量,以反映数据库在其原始环境中的标准性能。 这些度量可以包括但不限于 CPU 使用率、响应时间、事务速率和错误率。
此基线用作可比较迁移数据库性能的参考点。 但是,此基线数据的评估或比较与迁移数据库的性能指标仅在迁移完成后进行。
迁移后,会监视和测量新数据库环境的性能。 然后,这些迁移后指标与迁移前基线进行比较,以确定任何差异或性能问题。 此比较有助于了解迁移对数据库性能是否有任何负面影响,或者是否有需要优化以提高性能的区域。
自动优化
自动优化 是一项功能,可持续从工作负荷中学习、识别潜在问题和改进,并根据查询存储数据提供建议。 它适应架构或索引修改或数据更新导致的执行计划更改。
可以使用 Azure 门户手动应用优化建议,也可以让自动优化自主为你应用优化建议。 在 Azure SQL 数据库中,它还可以通过优化索引来提高查询性能。
自动计划更正
借助查询存储,数据库引擎可以检测查询执行计划何时在性能上回归。 尽管你可通过用户界面手动识别下降的计划,但查询存储还提供自动通知你的选项。
在给定的示例中,计划 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 数据库支持自动索引优化。 这意味着,随着时间的推移,数据库能够了解现有工作负荷,并提供有关添加或删除索引的建议,以便提供更好的性能。 与强制改进的查询计划一样,可以将数据库配置为允许根据现有索引性能自动创建或删除索引。
或者,使用以下查询查看数据库中已启用的自动优化功能。
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 数据库中的查询性能见解提供三种筛选选项:适用于长时间运行的查询、消耗资源最多的查询(默认值),或自定义筛选器。 它显示按所选资源排序的前五个查询,例如 CPU、数据 IO 或日志 IO。 可以通过选择下网格中的行来钻取各个查询。 每一行都标有与条形图中颜色匹配的非重复颜色。
自定义选项卡比其他选项更具灵活性。 它允许更定制地检查性能数据,其中包含多个影响数据可视化的下拉菜单。 关键指标包括 CPU、 日志 IO、 数据 IO 和 内存,这是 Azure SQL 数据库服务层级和计算资源限制的性能方面。
如果我们钻取到单个查询,则可以查看查询 ID 和查询本身,以及查询聚合类型和关联的时间段。
尽管 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 数据库和 Azure SQL 托管实例上设置扩展事件的过程类似,但本模块侧重于其差异,而不是教学设置过程。
下面是在 Azure SQL 数据库上配置扩展事件时的一些主要差异:
Transact-SQL:在 SQL Server 上执行
CREATE EVENT SESSION
命令时,请使用ON SERVER
子句。 但在 Azure SQL 数据库中,请改用ON DATABASE
子句。ON DATABASE
子句也适用于ALTER EVENT SESSION
和DROP EVENT SESSION
Transact-SQL 命令。 Azure SQL 数据库仅支持数据库范围的会话。数据库范围的会话:扩展事件基于 Azure SQL 数据库中的单租户隔离模型。 一个数据库中的事件会话无法访问另一个数据库中的数据或事件。 无法在 master 数据库的上下文中发出
CREATE EVENT SESSION
语句。存储:由于无法访问数据库位于 Azure SQL 数据库中的服务器文件系统,因此可以将存储帐户目标配置为存储扩展事件会话。