本文概述了使用托管实例链接在 Azure SQL 托管实例和托管在任意位置的 SQL Server 实例之间复制数据的最佳做法,从而提供链接副本之间的近实时数据复制。
定期创建日志备份
如果 SQL Server 是初始主要副本,则在初始种子设定完成后,当 Azure SQL 托管实例上的数据库不再处于正在还原...状态时,必须在 SQL Server 上进行第一次日志备份。 然后定期进行 SQL Server 事务日志备份,以便在 SQL Server 处于主要角色时保持正常的事务日志文件大小。
链接功能使用基于 Always On 可用性组的分布式可用性组技术复制数据。 使用分布式可用性组进行的数据复制基于复制事务日志记录。 只有在将事务日志记录复制到次要副本上的数据库之后,才能从 SQL Server 主实例上的数据库中截断这些记录。 如果网络连接问题导致事务日志记录复制速度缓慢或受阻,则日志文件将在主实例上持续增长。 增长速度取决于工作负载的强度和网络速度。 如果主实例上存在长时间的网络连接中断和繁重工作负载,则日志文件可能会占用所有可用存储空间。
定期进行事务日志备份会截断事务日志,并最大限度地降低由于日志文件增长而导致主 SQL Server 实例空间不足的风险。 当 SQL 托管实例是主实例时,无需执行额外的操作,因为日志备份操作已自动执行。 定期在 SQL Server 主实例上创建日志备份能使数据库更灵活地应对计划外日志增长事件。 考虑使用 SQL Server 代理作业来计划每日日志备份任务。
可以使用 Transact-SQL (T-SQL) 脚本来备份日志文件,例如本部分提供的示例。 请将示例脚本中的占位符替换为你的数据库名称、备份文件的名称和路径以及说明。
若要备份事务日志,请使用 SQL Server 上的以下示例 Transact-SQL (T-SQL) 脚本:
-- Execute on SQL Server
-- Take log backup
BACKUP LOG [<DatabaseName>]
TO DISK = N'<DiskPathandFileName>'
WITH NOFORMAT, NOINIT,
NAME = N'<Description>', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 1
使用以下 Transact-SQL (T-SQL) 命令检查 SQL Server 上的数据库使用的日志空间:
-- Execute on SQL Server
DBCC SQLPERF(LOGSPACE);
查询输出类似于以下示例数据库 tpcc
:
在此示例中,数据库使用了 76% 的可用日志空间,而绝对日志文件大小约为 27 GB (27,971 MB)。 操作阈值可能因工作负载而异。 在前面的示例中,事务日志大小和日志使用百分比通常指示,应该进行事务日志备份以截断日志文件并释放一些空间,或者应该进行更频繁的日志备份。 也可能指示事务日志截断被未结事务阻止。 有关排除 SQL Server 中事务日志故障的更多信息,请参阅排除完整事务日志故障 (SQL Server Error 9002)。 有关排查 Azure SQL 托管实例中的事务日志问题的详细信息,请参阅排查 Azure SQL 托管实例的事务日志错误。
注意
参与链接时,会从 SQL 托管实例进行自动完整备份和事务日志备份,无论其是否为主要副本。 不会进行差异备份,否则可能会导致还原时间更长。
匹配副本之间的性能容量
使用链接功能时,请务必匹配 SQL Server 和 SQL 托管实例之间的性能容量,以避免在次要副本无法跟上主要副本的复制节奏时或进行故障转移后出现性能问题。 性能容量包括 CPU 核心(或 Azure 中的 vCore)、内存和 I/O 吞吐量。
可以通过次要副本上的重做队列大小功能来检查复制的性能。 重做队列大小表示在次要副本上等待重做的日志记录的数量。 重做队列大小持续较高表示次要副本无法跟上主要副本的节奏。 可通过以下方式检查重做队列大小:
如果重做队列大小持续较高,请考虑增加次要副本上的资源。
轮换证书
可能需要手动轮换用于保护 SQL Server 上的数据库镜像终结点的证书。 由于用于保护 SQL 托管实例上的数据库镜像终结点的证书由服务管理并自动轮换,因此无需自行手动轮换。
SQL Server
证书用于保护 SQL Server 上的数据库镜像终结点可能会过期,这可能会导致连接性能下降。 为了防止出现此问题,请在证书过期之前轮换证书。
使用以下 Transact-SQL (T-SQL) 命令检查当前证书的期满日:
-- Run on SQL Server
USE MASTER
GO
SELECT * FROM sys.certificates WHERE pvt_key_encryption_type = 'MK'
如果证书即将过期或已过期,可以创建新的证书,然后更改现有终结点以替换当前证书。
将终结点配置为使用新证书后,可以删除过期的证书。
SQL 托管实例
SQL 托管实例上的数据库镜像终结点证书会定期自动轮换。 只要可以成功 验证 SQL Server 上的证书链 ,就不需要监视 SQL 托管实例上的数据库镜像终结点证书的到期日期。
验证 SQL Server 上的证书链
注意
应定期验证证书链是否有现有链接,或者排查降级链接的问题。 如果要配置新链接或最近完成部分中的步骤,请跳过此部分 :从 SQL 托管实例获取证书公钥并将其导入 SQL Server ,并将 Azure 受信任的根证书颁发机构密钥导入 SQL Server。
证书链的问题可能会降低连接的性能。 若要防止此问题,请定期 验证 SQL Server 上的证书链 。
以下方案可能会导致 SQL Server 上的证书链出现问题:
- SQL 托管实例上的计划证书轮换。
- 无意或意外更改 SQL Server 上的证书,例如删除或更改用于保护数据库镜像终结点的证书。
首先,通过替换<ManagedInstanceFQDN>
的值来确定导入的 MI 终结点证书,然后在 SQL Server 上运行以下查询:
-- Run on SQL Server
USE master
SELECT name, subject, certificate_id, start_date, expiry_date
FROM sys.certificates
WHERE issuer_name LIKE '%Microsoft Corporation%' AND name = '<ManagedInstanceFQDN>'
GO
接下来,通过替换上一个查询结果中的 <certificate_id>
值,然后在 SQL Server 上运行以下查询,来验证证书:
-- Run on SQL Server
USE master
EXEC sp_validate_certificate_ca_chain <certificate_id>
GO
指示 MI 终结点证书已成功通过验证的 Commands completed successfully. Completion time: ...
响应。
重要
存储过程 sp_validate_certificate_ca_chain
依赖于主机 OS 服务来执行证书验证,这可能涉及联机证书吊销检查。 如果未将主机 OS 配置为访问 Internet,则即使证书链有效,执行也会失败。
如果遇到错误,最可靠的缓解措施是首先 删除 在“ 从 SQL 托管实例获取证书公钥 ”部分中创建的所有证书,然后将其导入 SQL Server,并将 Azure 受信任的根证书颁发机构密钥导入 SQL Server,然后重新导入证书链。
添加启动跟踪标志
在 SQL Server 中,将两个跟踪标志(-T1800
和 -T9567
)添加为启动参数后,可以优化通过链接进行数据复制的性能。 有关详细信息,请参阅启用启动跟踪标志。
相关内容
要使用该链接,请参阅以下内容:
- 为托管实例链接准备环境
- 使用 SSMS 配置 SQL Server 与 SQL 托管实例之间的链接
- 使用脚本配置 SQL Server 与 SQL 托管实例之间的链接
- 故障转移链接
- 使用链接进行迁移
- 排查链接问题
要了解有关该链接的详细信息,请参阅以下内容:
对于其他复制和迁移方案,请考虑: