据我所知,版本存储将只清理比最老的活动事务更早的版本。问:最老的事务数据库是特定的吗?还是SQL Server将保留所有版本,不管数据库如何,如果有一个旧的事务仍然处于活动状态,那么句号?
背景- Server 2005 SP4企业托管大约40个数据库。TempDB目前是102 GB,版本存储大约是98 GB。托管在数据库实例上的一个应用程序具有一个基于sys.dm...database_transactions的开放事务,该事务已有40天的历史。在过去的一个月中,两个单独的大型数据库的使用非常频繁,我们看到了与这些操作相一致的TempDB增长。我们预期会有一些增长。我们没想到它会继续增长。问:TempDB的版本存储区中是否还保存着这两个独立数据库的版本,因为第三个独立的数据库有一个40天的连接,并显示了一个开放的transaction_state?
Perfmon计数器:版本商店在我今天早上跟踪的几个小时内持续增长。版本生成速率AVG约为30 kb/s,版本清除率为0 kb/s。
TempDB还有很大的空间,所有用户数据库的总数据文件大约有300 GB,自上次重新启动以来,TempDB平均每天为其8个数据文件中的每个文件增加350 MB。这种行为是不正常的,调查显示是大版本商店。
对评论问题的回答,以便没有一个长时间运行的评论部分:
问:为什么在tempdb上自动增长?答: TempDB被设置为初始化的大小,我们发现在大多数情况下都是合适的。我们允许自动增长,以便处理异常的数据库活动.我们也监控汽车的增长。
问:您如何知道事务是活动的,而不仅仅是一个活动的连接?答: transaction_state说在sys.dm_tran_active_snapshot_database_transactions和其他方面很活跃。Activity说,每个连接都有一个打开的事务。
问:为什么你的应用程序如此愚蠢?A:它的第三方。这件事上的很多人之一。我不知道这种行为是不正常的,还是很容易解决的。
开放事务(S)阻止任何版本存储清理,所以Jon是对的,版本存储清理是独立于数据库的。关闭违规事务允许版本存储清理开始。为什么是乔恩·塞杰尔的当前理论
版本存储只能根据整个实例中最古老的活动事务清除版本,以支持同时跨多个数据库使用事务级快照隔离。
如果有人确切地知道或能证明这一点,请做
参考问题:undefined
参考文件:
发布于 2013-12-15 03:12:24
最老的事务数据库是特定的吗?还是SQL Server将保留所有版本,无论数据库如何,如果有一个旧的事务仍然处于活动状态,则句号?
Server确保保留可能需要的所有行版本。
为了进一步讨论最后一点,只有在以下情况下才能删除ASU:
有关详细信息,请参阅下列资源:
来自SQL Server存储引擎团队的Sunil Argawal的一系列博客文章:
https://dba.stackexchange.com/questions/45934
复制相似问题