适用于:SQL Server
内存优化表会作为常规数据库备份的一部分进行备份。 对于基于磁盘的表,作为数据库备份的一部分,系统会验证数据和增量文件对的校验和,以检测存储损坏。
注意
在备份过程中,如果检测到内存优化文件组中一个或多个文件存在 CHECKSUM 错误,备份操作将失败。 在这种情况下,你必须从最近一次已知完好的备份中恢复你的数据库。
如果没有备份,可从内存优化表和基于磁盘的表导出数据,然后在删除并重新创建数据库之后重新加载数据。
包含一个或多个内存优化表的数据库的全量备份,由基于磁盘的表的已分配存储空间(如有)、活动事务日志,以及内存优化表的数据和增量文件对(也称为检查点文件对)组成。 但是,如 内存优化表的持久性中所述,内存优化表使用的存储可以比其在内存中的大小大得多,会影响数据库备份的大小。
完整数据库备份
此讨论侧重于只有持久内存优化表的数据库的数据库备份,因为基于磁盘的表的备份过程是相同的。 内存优化文件组内的检查点文件对可能处于不同状态。 下表介绍备份的文件部分。
| 检查点文件对的状态 | 备份 |
|---|---|
| PRECREATED | 仅文件元数据 |
| 正在施工中 | 仅限文件元数据 |
| ACTIVE | 文件元数据加上使用的字节 |
| MERGE 目标 | 仅限文件元数据 |
| 等待日志截断 | 文件元数据加上使用的字节 |
有关检查点文件对状态的说明,请参阅《sys.dm_db_xtp_checkpoint_files (Transact-SQL)》及其列 state_desc。
具有一个或多个内存优化表的数据库备份的大小通常大于其在内存中的大小,但小于其磁盘上存储。 额外大小取决于删除的行数及其他因素。
估计完整数据库备份的大小
重要
不建议使用 BackupSizeInBytes 值来估计内存中 OLTP 的备份大小。
第一个工作负载场景用于(主要)插入操作。 在此方案中,大多数数据文件处于“活动”状态,已完全加载,且删除的行非常少。 数据库备份的大小接近于内存中的数据大小。
第二个工作负荷方案适用于频繁的插入、删除和更新操作。 在最坏情况下,在考虑已删除行后,每个检查点文件对的加载量为50%。 数据库备份的大小至少是内存中的数据大小的 2 倍。
具有内存优化表的数据库的差异备份
如 内存优化表的持久性中所述,内存优化表的存储由数据文件和增量文件构成。 具有内存优化表的数据库的差异备份包含下列数据:
用于存储基于磁盘的表的文件组的差异备份不会受到内存优化表是否存在的影响。
活动事务日志与在完整数据库备份中相同。
对于内存优化数据文件组,差异备份采用与完整数据库备份相同的算法来识别要备份的数据文件和增量文件,但随后会按如下方式筛选出其中一部分文件:
数据文件包含新插入的行,并且在该文件已满时,它会关闭并且标记为只读。 只有在数据文件于上次完整数据库备份后被关闭的情况下,才会对其进行备份。 增量备份仅备份包含自上次完整数据库备份以来插入的行数据的数据文件。 例外情况是更新和删除场景,此时部分插入的行可能已被标记为待垃圾回收,或已被垃圾回收。
增量文件存储被删除数据行的引用。 由于任何未来的事务都可能删除一行,因此增量文件在其生命周期内的任何时候都可能被修改,它永远不会被关闭。 增量文件始终会被备份。 差异文件通常使用不到 10% 的存储空间,因此,差异文件对差异备份大小的影响很小。
如果内存优化表在您的数据库大小中占据很大比例,则差异备份可显著减小数据库备份大小。 对于典型 OLTP 工作负荷,差异备份显著小于完整数据库备份。