我使用 SQL Server 已经有一段时间了,我了解使用 TempDB 可能遇到的各种问题。但是,对于这个最新的问题,如果我的问题得到了正确的解决,那么一个带有 BEGIN TRANSACTION 的语句是否有可能使用悬空的 tempdb 表/对象(无提交)可以保持 tempdb LOG 文件“打开”并且不允许 tempdb 清除自己的日志?这会导致 tempdb 日志文件最终填满并导致 SQL Server 出现问题。我很难相信 SQL Server 中没有某种保护措施可以以某种方式允许 tempdb LOG 不受影响 如果没有,我觉得这令人不安……
TempDB 与任何其他数据库没有什么不同。必须记录所有操作,并且只有在给定事务的日志记录已提交或回滚后,才会重新使用日志空间。
正如@KrisGruttemeyer 在评论中所说,您可以通过查看以下内容来了解导致事务日志增长的操作类型:
这可能会向您显示 tempdb 的“活动事务”或“无”。如果您看到
active transaction
您知道某些事务已打开且尚未提交。您可以通过查看各种系统 DMV(包括 等)来了解哪些交易处于打开状态sys.dm_tran_active_transactions
。要更深入地了解导致 tempdb 增长的原因,请查看此问题。