次要副本的查询存储
SQL Server 2022 (16.x)
次要副本的查询存储功能在次要副本工作负载上启用可用于主要副本的相同的查询存储功能。 启用次要副本的查询存储后,副本会将通常存储在查询存储中的查询执行信息发送回主要副本。 然后,主要副本会将数据保存到自身查询存储中的磁盘。 从本质上讲,主要副本和所有次要副本之间共享有一个查询存储。 查询存储存在于主要副本上,将所有副本的数据一起存储。 目前,在可用性组中配置的 SQL Server 2022 (16.x) 实例可使用次要副本查询存储。
重要
次要副本的查询存储是一项预览功能。 它不适用于生产部署。 请参阅:SQL Server 2022 (16.0) 发行说明。
必须先启用跟踪标志 12606,然后才能为次要副本启用查询存储。 启用这些跟踪标志:
- 在 Windows 中,启动 SQL Server 配置管理器。
- 在 SQL Server 服务列表中,右键单击 SQL Server 2022 (16.x) 实例的 SQL Server 实例服务。 选择“属性”。
- 选择“启动参数”选项卡。在“指定启动参数:”字段中,添加值:
-T12606
并选择“添加”。 - 必须重启 SQL Server 实例服务,更改才会生效。
启用次要副本的查询存储
在对 SQL Server 实例上的次要副本使用查询存储之前,需要有一个 Always On 可用性组。 然后,使用 ALTER DATABASE SET 选项 (Transact-SQL) 启用次要副本的查询存储。
如果查询存储尚未启用,并且在主要副本上处于 READ_WRITE 模式,则必须先启用它,然后才能继续。 对主要副本上的每个所需数据库执行以下操作:
ALTER DATABASE [Database_Name] SET QUERY_STORE = ON;
GO
ALTER DATABASE [Database_Name] SET QUERY_STORE
( OPERATION_MODE = READ_WRITE );
若要在所有次要副本上启用查询存储,请连接到主要副本,并为每个所需的数据库执行以下操作。 目前,为次要副本启用查询存储后,所有次要副本都将启用查询存储。
ALTER DATABASE [Database_Name]
FOR SECONDARY SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE );
GO
若要在所有次要副本上禁用查询存储,请连接到主要副本,并为每个所需的数据库执行以下操作:
ALTER DATABASE [Database_Name]
FOR SECONDARY SET QUERY_STORE = OFF;
GO
可以通过连接到次要副本上的数据库并执行以下操作,验证次要副本上是否启用了查询存储:
SELECT desired_state, desired_state_desc, actual_state, actual_state_desc, readonly_reason
FROM sys.database_query_store_options;
GO
以下来自查询 sys.database_query_store_options 的示例结果指示对于次要副本,查询存储处于 READ_CAPTURE_SECONDARY 状态。 8
的 readonly_reason
指示查询是针对次要副本运行的。 这些结果指示已在次要副本上成功启用了查询存储。
desired_state | desired_state_desc | actual_state | actual_state_desc | readonly_reason |
---|---|---|---|---|
4 | READ_CAPTURE_SECONDARY | 4 | READ_CAPTURE_SECONDARY | 8 |
启用后,可以使用 sys.query_store_replicas 来验证次要副本上的查询存储的健康状况。
若要禁用次要副本的查询存储,请连接到主要副本上的数据库并运行以下代码:
ALTER DATABASE CURRENT
FOR SECONDARY SET QUERY_STORE = OFF;
GO
副本集
目前,为次要副本启用查询存储后,所有次要副本都将启用查询存储。
副本集定义为共享角色(主要、次要、异地次要、异地主要)的所有未命名副本或定义为单个命名副本。 可以在副本集的基础上将有关查询的存储数据当作工作负载来进行分析。 副本的查询存储可提供监视和调整可能针对次要副本执行的任何唯一只读工作负载的性能的功能。
次要副本的查询存储的性能注意事项
次要副本用来将查询信息发送回主要副本的通道是用于使次要副本保持最新状态的同一通道。 数据存储在主要副本上查询存储针对在主要副本上执行的查询所使用的相同表中,这会导致查询存储的大小增加。
因此,当系统负载过大时,你可能会注意到由于通道过载而出现一些减速。 此外,对于在次要副本上运行的工作负载,目前查询存储存在的相同的临时查询捕获问题将继续存在。 详细了解如何在查询存储中保留最相关数据。
另请参阅
- ALTER DATABASE SET 选项 (Transact-SQL)
- sys.database_query_store_options (Transact-SQL)
- sys.query_store_replicas
- sys.query_store_plan_forcing_locations (Transact-SQL)
- sys.sp_query_store_force_plan (Transact-SQL)