我收到通知,我管理的 SQL 实例的事务日志驱动器已满。我跳了起来,找到了哪个事务日志在增长,然后去查看事务日志增长的原因。查看 sys.databases,日志重用 desc 为 active_transaction。没什么大不了的,我想我可以看一下,找到针对数据库运行事务的会话,并找出后续步骤。这是一个开发数据库,所以我假设开发人员打开了一个事务,我只需要联系他们并让他们关闭事务即可。
现在来谈谈奇怪的事情。我使用 DBCC OPENTRAN 查找数据库中最旧的打开事务,输出中有两个奇怪的地方。
- 会话ID被列为53s,我从未见过带有字母的会话ID,
- 交易开始时间为2023年11月3日,但服务器于2023年11月6日重启。
我想我可以将数据库置于单用户模式并立即回滚,然后返回多用户模式,这将解决该问题。我现在暂时搁置了,因为我不明白发生了什么,也不明白事情是如何以这种方式结束的。
“s”表示这是一个系统线程/spid。您需要通过通常的方式检查这个 spid 正在做什么。如果它是系统线程,那么它很可能正在执行与系统相关/内部的操作。
这是非常可疑的,我并不是说你错了,我只是说这看起来很奇怪。由于我们目前不知道它在做什么,所以很难说更多。
这可能有帮助,也可能没有帮助,因为我们不知道那个 spid 在做什么。我们需要更多信息。