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

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

本文讨论使用系统版本控制内存优化时态表时的一些特定性能注意事项。

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

性能注意事项

每次更新和删除都会记录在内部内存优化历史记录表中。 如果工作负载大量使用这两个操作,则可能会出现意外的内存消耗。 因此,建议注意以下事项:

  • 不要一次性在当前表中执行大量删除操作。 请考虑分批删除数据,并通过调用 sp_xtp_flush_temporal_history 在两个批次之间手动调用数据刷新,或者在 SYSTEM_VERSIONING = OFF 时删除数据。

  • 不要一次性执行大量的表更新操作,因为这样做所产生的内存消耗可能是更新非时态内存优化表所需内存量的两倍。 双倍的内存消耗只是暂时的,因为数据刷新任务会定期执行,从而让计划边界内内部临时表的内存消耗保持稳定状态。 边界约为当前时态表内存消耗的 10%。 建议分批或在 SYSTEM_VERSIONING = OFF 时执行大量的更新操作,例如使用更新操作来设置新添加列的默认值。

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

请考虑将聚集列存储用作基于磁盘的历史记录表的存储选项,特别是在计划对历史数据使用聚合或开窗函数运行分析查询时。 在这种情况下,聚集列存储索引是历史记录表的最佳选择。 聚集列存储索引提供良好的数据压缩,还具有“插入友好”的行为,可与历史记录数据的生成方式保持一致。