智能性能
SQL Server 和 Azure SQL 包含自动化功能,可帮助为应用程序提供一致的性能。 这些自动化功能统称为智能性能。
Azure SQL 的智能性能包括智能查询处理、自动计划更正和自动优化。
智能查询处理
智能查询处理 (IQP) 是查询处理器中内置的一组新功能。 可使用最新的数据库兼容性级别来启用它。 应用程序使用最新数据库兼容性级别即可提高性能。 不需要更改任何代码。 IQP 的一个示例是表变量延迟编译,它可帮助使用表变量的查询运行更快。
对于使用 IQP 所需的数据库兼容性级别,Azure SQL 数据库和 Azure SQL 托管实例支持与 SQL Server 2019 及更高版本相同的兼容性级别 (150)。
自动计划更正
查询计划回归是使用 SQL Server 解决的最难的性能问题之一。 当重新编译相同查询,而新计划导致性能下降时,便会发生查询计划衰退。
SQL Server 2017 和 Azure SQL 数据库引入了通过分析查询存储中的数据进行自动计划更正的概念。 在 SQL Server 2017(或更高版本)和 Azure SQL 数据库中启用数据库查询存储时,SQL Server 引擎会查找查询计划回归并提供建议。 可在 sys.dm_db_tuning_recommendations
动态管理视图 (DMV) 中查看这些建议。 这些建议包含 T-SQL 语句,以便在性能处于良好状态时手动强制执行查询计划。
如果对这些建议有信心,则可以使 SQL Server 在遇到衰退时自动强制执行计划。 使用 ALTER DATABASE
和 AUTOMATIC_TUNING
参数启用自动计划更正。
对于 Azure SQL 数据库,还可通过 Azure 门户或 REST API 中的自动优化选项启用自动计划更正。 对于启用了查询存储的任何数据库,自动计划更正建议始终处于启用状态(这是 Azure SQL 数据库和 Azure SQL 托管实例的默认设置)。 对于新数据库,Azure SQL 数据库在默认情况下会启用自动计划更正 (FORCE_PLAN
)。
Azure SQL 数据库的自动优化
自动计划更正是 Azure SQL 和 SQL Server 中的一个自动优化示例,但是,Azure SQL 数据库的自动优化的一个独特方面是自动索引。
注意
自动索引当前不适用于 SQL 托管实例。
云为 Microsoft 提供了一种方法,用于在计划建议之外以性能建议和自动化的形式提供其他服务。 此功能被称为 Azure SQL 数据库的自动优化。 这些服务作为后台程序运行,用于分析 Azure SQL 数据库实例中的性能数据。 任何数据库订阅的价格中都涵盖了这些服务。
自动优化功能旨在解决的主要场景与索引相关。 自动优化会分析来自数据库遥测的数据(包括查询存储和 DMV),从而建议要创建的可提高应用程序性能的索引。 此外,可启用自动优化,以便自动创建可提高查询性能的索引。 自动优化还会监视索引更改,并建议删除或自动删除不会提高查询性能的索引。
Azure SQL 数据库的自动优化采用保守方法来建议索引。 这意味着可能出现在 DMV(如 sys.dm_db_missing_index_details
)或查询显示计划中的建议可能不会立即显示为自动优化的建议。 自动优化服务会监视一段时间内的查询,并使用机器学习算法提出建议,从而真正影响查询性能。
请注意,针对索引建议的自动优化不考虑索引可能对操作(例如插入、更新或删除)造成的任何开销性能。 通常,自动索引功能创建的新非聚集索引会对性能产生重大的积极影响。
参数化查询表示用于自动优化的其他方案。 包含非参数化值的查询可能会导致性能开销,因为每次非参数化值有所不同时,需重新编译执行计划。 在许多情况下,使用不同参数值的相同查询生成相同的执行计划。 但这些计划仍然分别添加到计划缓存中。 重新编译执行计划的过程会占用数据库资源、增加查询持续时间并使计划缓存溢出。 而这些事件导致系统从缓存中逐出计划。
可以使用参数敏感计划 (PSP) 优化来解决这种情况。 PSP 优化自动为单个参数化语句启用多个活动缓存计划。 缓存的执行计划根据客户提供的运行时参数值来适应不同的数据大小。
使用 Azure SQL 数据库中的自动优化的索引示例
下面是 Azure 门户中的一个示例,其中根据一段时间内的工作负载分析结果为数据库建议索引。 我们尚未向沙盒 Azure SQL 数据库发送足够的活动来生成此类建议。 CREATE INDEX
建议是随着工作负载的捕获而生成的,并非在此练习的较短期限内生成。
在 Azure 门户的“性能概述”中,可以看到在查询存储中找到的资源消耗量最大的五个查询的性能信息。 还提供了建议。
Azure 门户还提供“查询性能见解”,这是一个基于查询存储的可视化报告工具。 在此示例中,Query Performance Insight 会显示资源消耗量最大的特定查询,并建议如何提高查询性能。
Azure 门户还提供了一种直接查看任何性能建议的方式。
在此视图中,你会看到特定建议和任何自动优化操作的历史记录。 对于索引,会显示索引和表的详细信息。 “自动化”选项会启用自动优化。
可在数据库服务器或数据库级别设置自动优化选项。 如果在此场景中启用了自动优化,则会自动创建索引。
还可以通过 sys.database_automatic_tuning_options
DMV 查看自动优化选项。
注意
针对索引和参数敏感计划的建议和自动化不可用于 Azure SQL 托管实例或 SQL Server。 它们可使用自动计划更正。
如果选择建议的索引,则将获得特定索引的更多详细信息。
你将看到所需的索引、表和空间的详细信息。 可选择应用建议的索引或查看应用了该索引的 T-SQL 脚本。
请注意,该索引是一种非聚集索引,它作为联机索引进行应用。 如果根据建议应用了索引(手动或通过自动优化),则建议引擎还会使用所应用的索引监视一段时间内的查询性能。 如果与应用索引之前相比,查询性能下降,则可删除索引。