【问题标题】:Microsoft Team Foundation Server Express 2012 - How to clean up in tbl_TestResult (old test results)Microsoft Team Foundation Server Express 2012 - 如何清理 tbl_TestResult(旧测试结果)
【发布时间】:2018-09-18 16:52:37
【问题描述】:

我已经安装了 Microsoft Team Foundation Server Express 2012。

表 tbl_TestResult 占用了我的数据库空间的 7000 MB。

我试图查找有关如何清理此表的信息,但找不到这样做的方法。

当我想将新文件签入 TFS 时,我收到错误 TF30042:数据库已满...

在 Visul Studio 中,我删除了所有可见的测试,但 tbl_TestResult 的大小仍然只减少了一点点。

谁能向我解释如何以正确的方式清理所有测试结果?

【问题讨论】:

    标签: tfs


    【解决方案1】:

    我正在使用 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

    【讨论】:

    • 效果很好,谢谢!考虑到 TFS 需要一段时间才能真正赶上您的命令并从数据库中删除行。
    • 如果有人遇到问题/问题,请做几件事:1) Nuget 包 Microsoft.TeamFoundationServer.Client 和 Microsoft.TeamFoundationServer.ExtendedClient 可以轻松访问上面的类(我添加了两者,但您可以只需要一个或另一个)。 2)我们的 URL 没有以“DefaultCollection”结尾,通过查看我们用于访问 tfs 的 URL,我通常知道我们的 URL 是什么。
    【解决方案2】:

    我们的本地 TFS 遇到了同样的问题。这就是我们在 TFS 2015 到 TFS 2017 中的做法。

    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 的示例设置位于安装文件夹&lt;INSTALL_DIR&gt;\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>
    
    1. 上述配置文件删除了大于 100MB 且扩展名为 wmv、xesc、trmx 的非活动测试运行的测试附件。
    2. 使用以下命令执行测试尝试以找出结果:tcmpt.exe AttachmentCleanup /settingsfile:"all-100mb.xml" /mode:preview /collection:"https://tfs.contoso.com/DefaultCollection" /teamproject:"TeamProjectName" /outputfile:all-100mb.log"
    3. 这会生成一个非常详细的日志文件,其中包含您需要的关键信息,例如: ------------ Summary ------------ Number of attachments affected: 339 Total size of attachments: 39646,7 MB Elapsed time was 247,94 seconds
    4. 如果您对结果感到满意,请执行以下操作:
      • 如果您使用 MSSQL 服务器,请关闭 TFS 数据库的事务日志。
      • 如果您不这样做,您的事务日志增长速度可能会超过您删除测试附件的速度。
    5. 运行上面不带/mode:preview参数的tcmpt.exe命令删除测试附件。
    6. 完成后,从 TFS 数据库运行以下 2 个存储过程: EXEC dbo.prc_DeleteUnusedContent 1 EXEC dbo.prc_DeleteUnusedFiles 1, 0, 1000
      • 存储过程从数据库中删除空行。
      • 如果每个存储过程的持续时间少于 1 秒,请等待一段时间,然后重新运行。
    7. 然后您可以选择缩小数据库。

    祝你好运。

    【讨论】:

      【解决方案3】:

      如果您删除了不需要的构建,那么当您删除它时,您将看到删除与构建关联的测试结果的选项。

      您可能会发现测试附件也占用了大量空间,您可以使用 TFS 电动工具提供的测试附件清洁器来清除这些。

      TFPT可以找到here

      【讨论】:

      • 感谢您的回答。我之前通过 UI 删除了所有构建。但桌子仍然失去了一点点大小。不幸的是,TFPT 附件清理器只清理附件(顾名思义),而不是 TestResult 表。
      • 文件大小保持不变多长时间后,某些数据在 TFSJobAgent 启动并进行内务处理之前不会“清除”。您始终可以使用 tfsbuild destroy 命令永久删除构建,而不仅仅是删除函数提供的逻辑删除
      猜你喜欢
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 2011-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      相关资源
      最近更新 更多