SQL Server 2022 In-Memory 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 为长时间截断的原因。 此值指示事务日志正在等待发生 In-Memory 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,并根据需要收缩日志以回收空间。

更多信息

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