我们从2013年开始使用TFS 2012.与此同时,数据库增加到了〜60GB。 这有几个缺点,如增加备份时间,浪费驱动器空间,…
查看“顶级表的磁盘使用情况”报告后,我发现tbl_BuildInformation表已被炸毁。 60GB中的46GB用于存储/存档过去的构build信息(构build日志等)。 而且我们绝对没有任何使用这些信息的目的。
所以我遵循MSDN论坛的build议,怎样清理这些。 我应用了两个命令( tfsbuild.exe delete ...和tfsbuild.exe destroy ... )到我们的TFS服务器。 几乎1.5小时后,清理工作已经成功完成。 尊重表没有改变,但。 但几乎所有的条目都是孤儿,没有任何进一步的信息。
关于其他来源,这种行为是常见的和预期的。 但在我看来绝对是无稽之谈,毫无用处。 我做了这个步骤来得到一个干净和收缩的数据库。
任何想法或build议如何摆脱这一点? 实际上,我可以用SQL查询删除数据库中的孤立条目,但是专家build议严格禁止与意外行为有关的条目。 你有什么经验?
您必须等到“生成信息清理作业”运行(默认情况下,它每两天运行一次)。 运行TFSBuild.exe delete和TFSBuild.exe destroy后,这是清理tbl_buildInformation的工作。
您可以使用(在PowerShell中)检查它的计划:
$collection = "http://yourservername:8080/tfs/YourCollection" # change this to the URL of your team project collection $pathToAss2 = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\v2.0" $pathToAss4 = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\v4.5" Add-Type -Path "$pathToAss2\Microsoft.TeamFoundation.Client.dll" Add-Type -Path "$pathToAss2\Microsoft.TeamFoundation.Common.dll" Add-Type -Path "$pathToAss2\Microsoft.TeamFoundation.WorkItemTracking.Client.dll" Add-Type -Path "$pathToAss2\Microsoft.TeamFoundation.VersionControl.Client.dll" Add-Type -Path "$pathToAss4\Microsoft.TeamFoundation.ProjectManagement.dll" $tpc = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($collection) $jobService = $tpc.GetService([Microsoft.TeamFoundation.Framework.Client.ITeamFoundationJobService]) $job = $jobService.QueryJobs() | Where-Object {$_.Name -eq "Build Information Cleanup Job"} $job $jobService.QueryLatestJobHistory([Guid[]] @($job.JobId))
要使作业立即排队,请运行先前的命令,然后执行以下命令:
$jobService.QueueJobNow([Guid] $job.JobId, $false)
要更改计划,请运行:
$interval = 172800 # change this to the number of seconds between each run; 172800 = 2 days $job.Schedule[0].Interval = $interval # there is only one schedule for the build information clean-up job, we set its interval $jobService.UpdateJob($job)
要实际查看下一次该作业的运行时间,您必须转到数据库并运行以下查询(查询不完全正确,因为它在“ScheduledTime”和“Interval”列中显示了Tfs_YourCollection的信息所有列出的集合,其他信息是正确的,特别是QueueTime):
USE Tfs_YourCollection SELECT S.JobId, D.JobName, S.ScheduledTime, S.Interval, CQ.QueueTime, SH.Name FROM tbl_JobSchedule S LEFT OUTER JOIN tbl_JobDefinition D ON D.JobId = S.JobId LEFT OUTER JOIN [Tfs_Configuration].dbo.tbl_JobQueue CQ ON CQ.JobId = S.JobId LEFT OUTER JOIN [Tfs_Configuration].dbo.tbl_ServiceHost SH ON SH.HostId = CQ.JobSource WHERE D.JobName = 'Build Information Cleanup Job'
请参阅http://blogs.msdn.com/b/chrisid/archive/2010/02/15/introducing-the-tfs-background-job-agent-and-service.aspx和http://blogs.msdn.com /b/granth/archive/2013/02/13/tfs2012-what-are-all-the-different-jobs-built-in-to-tfs.aspx了解更多信息。