内存优化型系统版本控制时态表的性能

适用于: SQL Server 2016 (13.x) 及更高版本 Azure SQL 托管实例

本文讨论了使用系统版本化内存优化的时序表时的具体性能考虑。

在向现有的非时态表添加系统版本控制时,更新和删除操作的性能可能会受到影响,因为历史记录表会自动更新。

性能注意事项

每次更新和删除都会记录在内部内存优化历史记录表中。 如果你的工作负载大量使用这两种操作,可能会遇到意想不到的内存消耗。 考虑以下情况:

  • 不要一次性在当前表中执行大量删除操作。 考虑分多个批次删除数据,并在批次之间使用 sp_xtp_flush_temporal_history 手动刷新数据,或在 SYSTEM_VERSIONING = OFF 期间执行此操作。

  • 不要一次性进行大量表更新,因为这可能会占用两倍于更新非时序内存优化表所需的内存。 内存消耗加倍只是暂时的,因为在稳态下,数据刷新任务会定期运行,使内部暂存表的内存消耗保持在预期范围内。 边界约为当前时态表内存消耗的 10%。 建议分批或在 SYSTEM_VERSIONING = OFF 时执行大量的更新操作,例如使用更新操作来设置新添加列的默认值。

数据刷新任务的激活时间段无法进行配置,但是可以根据需要手动执行 sp_xtp_flush_temporal_history

考虑使用集群列存储作为基于磁盘的历史表的存储选项,尤其是如果你计划对使用聚合或窗口函数的历史数据进行分析查询。 在这种情况下,聚集列存储索引是历史记录表的最佳选择。 聚集列存储索引可提供良好的数据压缩,并且具有插入友好的特性,这与历史数据的生成方式相契合。