【问题标题】:How to shrink TFS database size如何缩小 TFS 数据库大小
【发布时间】:2013-11-02 17:42:15
【问题描述】:

我们有一个 TFS2010 环境。很长一段时间以来,它的大小每周都在增长。

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

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

我检查了所有我能想到的日志,但找不到任何错误。

有人建议吗?

谢谢

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

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 模板 dbo 7 41328 41280 48

【问题讨论】:

  • 尝试从这个 SO 问题运行 SQL 查询,看看是什么占用了所有空间,然后更新您的问题:stackoverflow.com/questions/7892334/…
  • 我按照您的要求用查询结果编辑了问题。
  • 显示最大的表为 41MB,你的 DB 有多大?
  • 160GB左右。当我看到脚本的结果时,我也认为这是不对的。我检查了 mdf 文件的名称,它是正确的。那么查询错了吗?我使用了您链接中标记为答案的那个。

标签: tfs


【解决方案1】:

在您的情况下,大部分磁盘空间将被事务日志文件使用,而不是数据文件。

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

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

【讨论】:

  • 你是说数据库的ldf文件?我的 DefaultCollection 的 ldf 文件是 32.1 GB,mdf 文件是 130 GB。
  • 是的,我就是这个意思。
  • 好的...我搜索了收缩ldf文件并看到了这篇文章。 technet.microsoft.com/en-us/library/ms365418.aspx。但我什么时候需要这样做?我什么时候知道是时候了?如何查看有未使用的空间?
【解决方案2】:

查看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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多