如何缩小TFS数据库大小

时间:2013-10-24 06:41:16

标签: tfs tfs2010

我们有一个TFS2010环境。这个规模现在每周都在增长很长一段时间。

我们删除了很多旧的分支和团队项目。我们还使用测试附件清洁器来完成像Brian Harry在他的帖子中所说的几个项目。 http://blogs.msdn.com/b/bharry/archive/2011/10/31/tfs-databases-growing-out-of-control.aspx

数据库没有变小。我也尝试过多次使用destroy命令,但没有任何帮助。

我检查了我能想到的每个日志,但找不到任何关于它的错误。

有人提出建议吗?

由于

使用评论中询问的查询结果进行编辑:

TableName                       SchemaName RowCounts TotalSpaceKB UsedSpaceKB UnusedSpaceKB
FieldsDataArchive               dbo        0         0            0           0
tbl_AuditLog                    dbo        41710     5168         3800        1368
tbl_AuthorizationUpdateLock     dbo        1         16           16          0
tbl_BuildOutput                 dbo        0         0            0           0
tbl_BuildServerProperties       dbo        1         16           16          0
tbl_BuildSqlNotification        dbo        124445    8432         6544        1888
tbl_Counter                     dbo        3         16           16          0
tbl_LastChangeId                dbo        1         16           16          0
tbl_Replication                 dbo        1         16           16          0
tbl_Repository                  dbo        1         16           16          0
TempADObjectMemberships         dbo        0         0            0           0
TempADObjects                   dbo        0         0            0           0
Templates                       dbo        7         41328        41280       48

3 个答案:

答案 0 :(得分:1)

您的案例中的大多数磁盘空间将由事务日志文件使用,而不是数据文件。

上面的查询仅显示数据文件使用的磁盘空间。

如果有可用空间,您可以查看缩小事务日志。

答案 1 :(得分:1)

在查看TFS数据库的事务日志的不合理增长之后 我无法找到增长的确切原因,也无法控制自动收缩日志。

Similar solution without the full database backup

我在非生产服务器上尝试了几天这个脚本,并且只在我切换到生产服务器之后。

在SQL Server 2012上进行破坏& TFS 2015

以下脚本会自动缩小事务日志。

使用SQL job

完全备份后运行此脚本

脚本部分:

1)断开与特定数据库的所有连接

2)将备份模型切换为简单

3)将数据库日志大小设置为无限

4)将日志文件缩小到200mb(或任何你想要的大小)

5)将最大尺寸设置为50000(或您希望的任何尺寸)

6)将备份模型设置为完整

140GB数据库上的脚本运行大约需要3-5秒

USE [master]
GO
ALTER DATABASE [Tfs] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [Tfs] SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE [Tfs] MODIFY FILE ( NAME = N'Tfs_log', MAXSIZE = UNLIMITED)
GO

USE [Tfs]
GO
DBCC SHRINKFILE (N'Tfs_log' , 200)
GO

ALTER DATABASE [Tfs] MODIFY FILE ( NAME = N'Tfs_log', MAXSIZE = 50000)

USE [master]
GO
ALTER DATABASE [Tfs] SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE [Tfs] SET MULTI_USER
GO

答案 2 :(得分:0)

我遇到类似问题时发现的另一个建议是通过将表的恢复模式更改为“简单”来防止LDF文件重新生成。

首先,缩小LDF文件。我是使用SQL管理工作室完成的。

收缩数据库并确保TFS仍然有效后,请按照此处的说明进行操作:stop-sql-server-transaction-log-ldf-files-from-growing-indefinitely

这将导致SQL Server减少保存到事务日志中的恢复数据量,这样您就不必每X个月重复一次收缩操作。