Stretch Database 的管理和故障排除

适用于: SQL Server 2016 (13.x) 及更高版本 - 仅限 Windows

重要

SQL Server 2022 (16.x) 和 Azure SQL 数据库中已弃用 Stretch Database。 在数据库引擎的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

要对 Stretch Database 进行管理和故障排除,请使用本文中所述的工具和方法。

管理本地数据

获取对 Stretch Database 启用的本地数据库和表的相关信息。

打开目录视图 sys.databasessys.tables 以查看关于 Stretch 启用的 SQL Server 数据库和表的信息。 有关详细信息,请参阅 sys.databases (Transact-SQL)sys.tables (Transact-SQL)

若要查看 SQL Server 中已启用延伸的表使用的空间量,请运行以下语句。

USE <Stretch-enabled database name>;
GO
EXEC sp_spaceused '<Stretch-enabled table name>', 'true', 'LOCAL_ONLY';
GO

管理数据迁移

检查应用到表的筛选器函数

打开目录视图 sys.remote_data_archive_tables ,并检查 filter_predicate 列的值,以标识 Stretch Database 用于选择要迁移的行的函数。 如果值为 null,则整个表符合迁移条件。 有关详细信息,请参阅 sys.remote_data_archive_tables (Transact-SQL)使用筛选器函数选择要迁移的行

检查数据迁移的状态

在 SQL Server Management Studio 中针对数据库选择“任务”>“延伸”>“监视”以便在 Stretch Database 监视器中监视数据迁移。 有关详细信息,请参阅数据迁移的监视和故障排除 (Stretch Database)

或者,打开动态管理视图 sys.dm_db_rda_migration_status 以查看有多少批数据和数据行已迁移。

数据迁移故障排除

有关故障排除的建议,请参阅数据迁移的监视和故障排除 (Stretch Database)

管理远程数据

获取 Stretch Database 使用的远程数据库和表的相关信息。

打开目录视图 sys.remote_data_archive_databasessys.remote_data_archive_tables 以查看关于在其中存储迁移数据的远程数据库和表的信息。 有关详细信息,请参阅 sys.remote_data_archive_databases (Transact-SQL)sys.remote_data_archive_tables (Transact-SQL)

若要查看 Azure 中已启用延伸的表使用的空间量,请运行以下语句。

USE <Stretch-enabled database name>;
GO
EXEC sp_spaceused '<Stretch-enabled table name>', 'true', 'REMOTE_ONLY';
GO

删除已迁移数据

若要删除已迁移到 Azure 的数据,请按照 sys.sp_rda_reconcile_batch中所述的步骤进行操作。

管理表架构

不要更改远程表的架构

不要更改为 Stretch Database 配置的 SQL Server 表相关联的远程 Azure 表的架构。 特别是,不要修改列的名称或数据类型。 Stretch Database 功能对与 SQL Server 表的架构相关的远程表的架构作出各种假设。 如果更改了远程架构,所更改表的 Stretch Database 将停止工作。

协调时间表列

如果意外删除了远程表中的列,运行 sp_rda_reconcile_columns 可将存在于已启用延伸的 SQL Server 表但不存在于远程表中的列添加到远程表。 有关详细信息,请参阅 sys.sp_rda_reconcile_columns

重要

sp_rda_reconcile_columns 重新创建你从远程表中意外删除的列时,不会还原之前位于已删除列中的数据。

sp_rda_reconcile_columns 不会删除存在于远程表中而不存在于已启用延伸的 SQL Server 表中的列。 如果远程 Azure 表中存在已启用延伸的 SQL Server 表中不复存在的列,这些额外的列不会阻止 Stretch Database 正常运行。 你可以选择手动删除额外列。

管理性能和成本

查询性能故障排除

包括 Stretch 启用的表的查询应该比在为 Stretch 启用表之前执行得更慢。 如果查询性能显著下降,请查看以下可能的问题。

  • 你的 Azure 服务器是否处在与你的 SQL Server 不同的地理区域? 请将你的 Azure 服务器配置为处于与你的 SQL Server 相同的地理区域以减少网络延迟。

  • 你的网络条件可能已退化。 有关最新问题或中断的信息,请与你的网络管理员联系。

提高资源密集型操作(如索引)的 Azure 性能级别

在生成、重新生成或重新组织为 Stretch Database 配置的大型表上的索引,并预计在此期间大量查询 Azure 中的已迁移数据时,请考虑在操作期间提高相应远程 Azure 数据库的性能级别。 有关性能级别和定价的详细信息,请参阅 SQL Server Stretch Database 定价

不能暂停 Azure 上的 SQL Server Stretch Database 服务

请确保选择适当的性能和定价级别。 如果为需占用大量资源的操作而临时增加性能级别,请在操作完成后将其还原到以前的级别。 有关性能级别和定价的详细信息,请参阅 SQL Server Stretch Database 定价

更改查询作用域

针对已启用延伸的表的查询默认返回本地和远程数据。 可以更改所有用户所有查询的作用域,或只更改管理员单个查询的作用域。

更改所有用户所有查询的查询作用域

若要更改所有用户所有查询的作用域,请运行存储的过程 sys.sp_rda_set_query_mode。 可缩小作用域以便仅查询本地数据、禁用所有查询或还原默认设置。 有关详细信息,请参阅 sys.sp_rda_set_query_mode

更改管理员单个查询的查询作用域

要更改 db_owner 角色的成员进行的单个查询的范围,请将 WITH ( REMOTE_DATA_ARCHIVE_OVERRIDE = *value* ) 查询提示添加到 SELECT 语句。 REMOTE_DATA_ARCHIVE_OVERRIDE 查询提示可以具有下列值。

  • LOCAL_ONLY。 仅查询本地数据。

  • REMOTE_ONLY。 仅查询远程数据。

  • STAGE_ONLY。 仅查询这样的表中的数据,Stretch Database 在其中暂存符合迁移条件的行并在迁移后指定时段内保留已迁移的行。 此查询提示是查询临时表的唯一方法。

例如,下面的查询将仅返回本地结果。

USE [<Stretch-enabled database name>];
GO
SELECT *
FROM [<Stretch_enabled table name>]
WITH (REMOTE_DATA_ARCHIVE_OVERRIDE = LOCAL_ONLY)
WHERE someCol = 1 /* sample predicate only, please replace with an appropriate one */;
GO

进行管理更新和删除

默认情况下,无法更新或删除已启用延伸的表中符合迁移条件的行或已迁移的行。 必须解决问题时,db_owner 角色的成员可以通过将 WITH ( REMOTE_DATA_ARCHIVE_OVERRIDE = *value* ) 查询提示添加到语句来运行 UPDATE 或 DELETE 操作。 REMOTE_DATA_ARCHIVE_OVERRIDE 查询提示可以具有下列值。

  • LOCAL_ONLY。 仅更新或删除本地数据。

  • REMOTE_ONLY。 仅更新或删除远程数据。

  • STAGE_ONLY。 仅更新或删除这样的表中的数据,Stretch Database 在其中暂存符合迁移条件的行并在迁移后指定时段内保留已迁移的行。

请参阅