SQL Server 2022 中内存中 OLTP 的数据库的事务日志文件增长

现象

当数据库在 SQL Server 2022启用了内存中 OLTP 功能时,你会注意到事务日志文件会持续增长。 此外,SQL Server 错误日志可能有类似 Close thread is falling behind: 4 checkpoints outstanding消息。

如果重新启动 SQL Server 实例,你可能会注意到数据库需要很长时间才能完成数据库恢复过程。

排查 sys.databases 和 sys.dm_db_xtp_checkpoint_stats问题

  • 使用目录视图 sys.databases 来收集信息并解决此问题时,该列 log_reuse_wait_desc 将显示 XTP_CHECKPOINT 为长时间截断的原因。 此值指示事务日志正在等待发生内存中 OLTP(以前称为 Hekaton)检查点。 它建议检查点操作出现延迟,这可能会影响性能或日志文件的增长。

  • 使用 SQL Server 动态管理视图(DMV) sys.dm_db_xtp_checkpoint_stats 收集信息并解决此问题时,该列 outstanding_checkpoint_count 显示长时间的非零值。 它表示检查点不会有效发生,这可能会影响性能和日志文件的增长。

原因

SQL Server 2022 引入了新功能,可改进大型内存服务器中的内存管理,以减少内存不足的情况。 此更改中的已知问题有时会导致“症状部分中介绍的行为。

解决方法

若要解决此问题,请执行以下步骤:

  1. 添加 -T9810 作为 SQL Server 实例的启动参数。
  2. 重新启动该实例。
  3. 发出检查点、执行日志备份、观察 log_reuse_wait_desc和收缩日志(如果需要)以回收空间。

注意

此问题已在 SQL Server 2022 累积更新 7 中修复。

详细信息

跟踪标志 9810 禁用内存中 OLTP 引擎回收线程本地存储 (TLS) 内存,还原到 SQL Server 2019 的行为。