分类: 数据库开发技术
2009-07-09 13:53:04
对于每个数据库引擎实例,tempdb 都必须具有足够的空间以容纳在该实例中为每个数据库生成的行版本。数据库管理员必须确保 tempdb 具有足够的空间来支持版本存储区。tempdb 中有两种版本存储区:
只要活动事务需要访问行版本,就必须存储行版本。后台线程每隔一分钟删除一次不再需要的行版本,从而释放 tempdb 中的版本空间。如果长时间运行的事务符合下列任何一种条件,则会阻止释放版本存储区中的空间:
tempdb 空间不足时
当 tempdb 空间不足时,数据库引擎强制收缩版本存储区。在收缩进程期间,尚未生成行版本且运行时间最长的事务被标记为牺牲品。在错误日志中为每个作为牺牲品的事务生 成消息 3967。如果某个事务被标记为牺牲品,则该事务不能再读取版本存储区中的行版本。当其尝试读取行版本时,会生成消息 3966 且该事务会被回滚。如果收缩进程成功,则 tempdb 中就有可用空间。否则 tempdb 空间不足,并出现下列情况: