Azure灾难和恢复备份中的SQL Server 2016问题



在查看性能监视器后,我运行了一些SQL查询,以了解Azure中CPU为何达到最大值。

最高执行次数查询结果

下面的查询被确定为执行次数超过500次的最高查询,一旦我删除了灾难恢复,这个查询就不再生成,CPU资源返回到70%以下,但似乎不明白是什么原因造成的。请查看。

INSERT INTO @t
SELECT  
aamd.db_name,
aamd.db_guid,
CASE
WHEN aamd.group_db_guid IS NULL
THEN CONVERT(BIT, 'false')
ELSE CONVERT(BIT, 'true')
END,
CASE
WHEN aamd.drop_date IS NULL
THEN CONVERT(BIT, 'false')
ELSE CONVERT(BIT, 'true')
END,
CONVERT(BIT, aatm.task_agent_data.value('(/DBBackupRecordV2/autoBackupSetting)[1]', 'nvarchar(32)')),
NULLIF(aatm.task_agent_data.value('(/DBBackupRecordV2/containerURL)[1]', 'nvarchar(1024)'), ''),
NULLIF(aatm.task_agent_data.value('(/DBBackupRecordV2/retentionPeriod)[1]', 'int'), 0),
NULLIF(aatm.task_agent_data.value('(/DBBackupRecordV2/encryptionAlgorithm)[1]', 'nvarchar(128)'), ''),
NULLIF(aatm.task_agent_data.value('(/DBBackupRecordV2/encryptorType)[1]', 'nvarchar(32)'), ''),
NULLIF(aatm.task_agent_data.value('(/DBBackupRecordV2/encryptorName)[1]', 'nvarchar(128)'), ''),
NULLIF(aatm.task_agent_data.value('(/DBBackupRecordV2/localCachePath)[1]', 'nvarchar(1024)'), ''),
NULLIF(aatm.task_agent_data.value('(/DBBackupRecordV2/schedulingOption)[1]', 'nvarchar(128)'), ''),
NULLIF(aatm.task_agent_data.value('(/DBBackupRecordV2/fullBackupFreqType)[1]', 'nvarchar(128)'), ''),
NULLIF(aatm.task_agent_data.value('(/DBBackupRecordV2/daysOfWeek)[1]', 'nvarchar(256)'), ''),
NULLIF(aatm.task_agent_data.value('(/DBBackupRecordV2/backupBeginTime)[1]', 'nvarchar(32)'), ''),
NULLIF(aatm.task_agent_data.value('(/DBBackupRecordV2/backupDuration)[1]', 'nvarchar(32)'), ''),
NULLIF(aatm.task_agent_data.value('(/DBBackupRecordV2/logBackupFreq)[1]', 'nvarchar(32)'), '')
FROM autoadmin_managed_databases aamd
RIGHT OUTER JOIN autoadmin_task_agent_metadata aatm
ON aamd.autoadmin_id = aatm.autoadmin_id
WHERE
(
QUOTENAME(@db_name) = QUOTENAME('') OR
QUOTENAME(@db_name) = QUOTENAME(aamd.db_name)
) AND
(
aatm.task_agent_data.exist('/DBBackupRecordV2') = 1
)
AND aamd.autoadmin_id <>

规模需求为维护灾难恢复解决方案所需的组件提供了最佳估计。

每个虚拟服务器代理(VSA)实例使用其物理机核心或vCPU来处理每个VM磁盘,并使用2 GB内存来处理数据流。根据CPU/vCPU的可用性、RAM的可用性和节流设置,处理多个磁盘和虚拟机。性能由存储传输介质、磁盘速度和网络带宽驱动。你必须考虑到这些因素。

假设指定时间内每个组件的内核数量和RAM数量如下:

  • 虚拟服务器代理(VSA):1个CPU核心和2 GB RAM可以处理在8小时的窗口内最多可获得4 TB的数据。这假设读取和写入数据所需的磁盘速度以及所需的带宽是可用的。

  • MediaAgent(MA):2个CPU核心和16 GB RAM最多可处理50个在8小时窗口内达到TB。这假设读取和写入数据所需的磁盘速度、用于重复数据消除数据库(DDB)和索引的SSD空间以及所需的带宽都可用。

  • CommServe服务器:8个CPU核心和32 GB RAM最多可运行1000虚拟机。

复制规模

假设以下组成部分和因素:

  • VM大小=每个 100 GB RAM

  • 以百分比(r)表示的数据更改率=10%

    注意:这假设变化率很高。通常变化率为2%-5%。

  • 带宽(b)=10 GBps

  • 恢复点目标(RPO)=60分钟

要满足60分钟的SLA(恢复时间),复制操作必须在60分钟内完成10 TB(100 TB的10%)。对于10个小型访问节点,如果有必要的存储速度和带宽,则需要4个vCPU和8 GB RAM才能在30分钟内从源站点读取数据并将其传输到辅助(DR)站点。

数据传输完成后,您必须考虑在辅助站点中重建或应用副本更改所需的时间。对于10%的更改率,例如,需要10个访问节点,每个访问节点至少应有2个核心和4 GB RAM,以便在30分钟内对副本应用10 TB的数据更改。

设计备份策略

选择了满足特定数据库业务需求的恢复模型后,必须规划并实施相应的备份策略。最佳备份策略取决于多种因素,其中以下因素尤为重要:

  • 应用程序每天要访问数据库多少小时?

    如果存在可预测的非高峰时段,我们建议您为该时段安排完整数据库备份。

  • 更改和更新的频率有多高?

    如果更改频繁,请考虑以下内容:

  • 在简单恢复模型下,请考虑在完整数据库备份之间安排差异
    备份。差异备份捕获只有自上次完整数据库备份以来的更改。

  • 在完全恢复模式下,您应该安排频繁日志备份。安排完整备份之间的差异备份可以通过减少必须备份的日志数量来减少恢复时间恢复数据后再进行恢复。

  • 更改是否可能只发生在数据库的一小部分中,或者在数据库的很大一部分?

    对于更改集中在部分文件或文件组中的大型数据库,部分备份和/或文件备份可能很有用。有关详细信息,请参阅部分备份(SQL Server)和完整文件备份(SQL服务器)。

  • 完整数据库备份需要多少磁盘空间?

  • 您的业务在过去需要多长时间来维护备份?

确保根据应用程序的需要和业务需求制定了适当的备份时间表。随着备份变旧,数据丢失的风险会更高,除非您有办法重新生成所有数据,直到出现故障。在由于存储资源限制而选择处置旧备份之前,请考虑在过去的中是否需要可恢复性

有用的链接:

  • https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/back-up-and-restore-of-sql-server-databases?view=sql-服务器版本15
  • https://www.nucleustechnologies.com/blog/sql-server-disaster-recovery-plan/
  • https://www.sqlshack.com/useful-considerations-for-sql-server-disaster-recovery/

最新更新