2014-08-27 98 views
3

我已经安装了微软的Team Foundation Server Express的2012微软的Team Foundation Server Express的2012 -

表tbl_TestResult如何清理tbl_TestResult(旧测试结果)在使用我的数据库空间高达7000 MB。

我试图找到如何清理这个表的信息,但没有找到办法。

当我想在新的文件到TFS我得到的错误TF30042检查:数据库是全...

在Visul工作室我删除了所有可见的测试,但仍tbl_TestResult的大小刚刚降低很少。

任何人都可以向我解释我如何以适当的方式清理所有测试结果?

回答

0

如果您删除了不需要的版本,那么您将会看到删除与版本相关联的测试结果的选项。 TFS Build Delete options

您可能会发现测试附件也消耗了很多空间,您可以使用随TFS电动工具提供的测试附件清洁工来清除这些附件。

TFPT可以发现here

+1

谢谢你的回答。我之前通过用户界面删除了所有版本。但桌子仍然略微缩小。不幸的是,TFPT附件清理器只是清除附件(顾名思义),而不是TestResult表。 – MarkusE 2014-08-28 12:15:18

+0

在文件大小保持不变之后多长时间,在TFSJobAgent启动并执行内务操作之前,某些数据不会被“清除”。你总是可以使用tfsbuild destroy命令来永久删除内部版本,而不仅仅是删除功能提供的逻辑删除 – 2014-08-28 12:19:34

0

我现在只是删除通过Visual Studio支持所有作品,然后我关机TFS创建的TFS数据库的备份和截断整个表tbl_TestResult并再次启动TFS。

TFS没有抱怨,工作仍然良好。这解决了我的问题。

+0

如果微软能够证实这确实是解决这个问题的好办法,那么当然会很好。截断表听起来有点可怕:) – l33t 2015-06-04 11:32:10

2

我正在使用TFS客户端API删除旧的测试运行。下面是一些示例代码:

TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri("http://tfs2012:8080/tfs/DefaultCollection/")); 

TestManagementService testManagementService = tpc.GetService<TestManagementService>(); 

ITestManagementTeamProject teamProject = testManagementService.GetTeamProject("MyProject"); 

int totalRuns = teamProject.TestRuns.Count("SELECT * FROM TestRun"); 

// Limit by date, so the query doesn't take too long. 
string query = "SELECT * FROM TestRun WHERE CreationDate < '2013/07/01'"; 
int numTotalToDelete = teamProject.TestRuns.Count(query); 

if (numTotalToDelete == 0) { return; } 

// Only delete 500 at a time, to give SQL Server time to breathe (don't ask). 
var runsToDelete = teamProject.TestRuns.Query(query, false) 
           .Take(500); 
teamProject.TestRuns.Delete(runsToDelete); 

查询语法来自这里:http://blogs.msdn.com/b/duat_le/archive/2010/02/25/wiql-for-test.aspx

+1

这很好,谢谢!考虑到TFS需要一段时间才能真正赶上你的命令并从数据库中删除行。 – 2016-03-29 15:39:37

+1

夫妇的事情使任何人遇到问题/问题:1)上述类可以很容易地通过Nuget软件包Microsoft.TeamFoundationServer.Client和Microsoft.TeamFoundationServer.ExtendedClient访问(我同时添加,但你可能只需要一个或另一个) 。 2)我们的Url没有以'DefaultCollection'结尾,通过查看我们的URL来访问tfs通常我知道我们的是什么。 – Knightsy 2017-03-23 16:11:47

0

我们有同样的问题,我们在炳TFS。这就是我们这样做是为了TFS 2015年达2017 TFS

  1. 安装Microsoft Visual Studio Team Foundation Server 2015 Power Tools以访问测试附件清洁(TAC),tcmpt.exe
  2. 它安装到c:\Program Files (x86)\Microsoft Team Foundation Server 2015 Power Tools
  3. 为TAC样品设置位于安装文件夹,在<INSTALL_DIR>\TestAttachmentCleaner_samples_settingsfile
  4. 创建自己的设置文件,例如,all-100mb.xml文件:
<DeletionCriteria> 
<TestRun> 
    <Created Before="2016-01-01" /> 
</TestRun> 
<Attachment> 
    <Extensions> 
    <Include value="wmv" /> 
    <Include value="xesc" /> 
    <Include value="trmx" /> 
    </Extensions> 
    <!-- size in MB --> 
    <SizeInMB GreaterThan="100" /> 
</Attachment> 
<LinkedBugs> 
    <Exclude state="Active" /> 
</LinkedBugs> 
</DeletionCriteria> 
  • 上述配置文件会删除大于100MB的非活动测试运行的测试附件,其扩展名为:wmv,xesc,trmx。
  • 执行测试试图找出与此命令的结果:tcmpt.exe AttachmentCleanup /settingsfile:"all-100mb.xml" /mode:preview /collection:"https://tfs.contoso.com/DefaultCollection" /teamproject:"TeamProjectName" /outputfile:all-100mb.log"
  • 这将产生包括你所需的关键信息,像一个非常详细的日志文件: ------------ Summary ------------ Number of attachments affected: 339 Total size of attachments: 39646,7 MB Elapsed time was 247,94 seconds
  • 当您满意的结果,做这:
    • 如果您使用MSSQL服务器,请关闭TFS数据库的事务日志。
    • 如果您不这样做,您可能会比删除测试附件更快地增长事务日志。
  • 运行tcmpt.exe命令上面没有/mode:preview参数删除测试附件。
  • 完成后,运行从TFS数据库中的这些2个存储过程: EXEC dbo.prc_DeleteUnusedContent 1 EXEC dbo.prc_DeleteUnusedFiles 1, 0, 1000
    • 存储过程从数据库中删除清空行。
    • 如果存储过程每次持续时间少于1秒,请等待一段时间再重新运行它们。
  • 然后你可以选择收缩你的数据库。
  • 祝你好运。