tfsbuild.exe 삭제/파괴는 데이터베이스에 고아를 유지합니다.

tfsbuild.exe 삭제/파괴는 데이터베이스에 고아를 유지합니다.

우리는 2013년부터 TFS 2012를 사용하고 있습니다. 그 동안 데이터베이스는 최대 60GB까지 늘어났습니다. 여기에는 백업 시간 증가, 드라이브 공간 낭비 등 여러 가지 단점이 있습니다.

'상위 테이블별 디스크 사용량' 보고서를 살펴본 후 테이블이 tbl_BuildInformation폭파되었음을 알았습니다. 60GB 중 46GB는 과거 빌드 정보(빌드 로그 등)를 저장/보관하는 데 사용됩니다. 그리고 우리는 더 이상 이 정보를 사용할 목적이 전혀 없습니다.

따라서 MSDN 포럼의 제안을 따라 이를 정리하는 방법을 따랐습니다. TFS 서버에 두 가지 명령( tfsbuild.exe delete ...및 ) 을 적용했습니다 . tfsbuild.exe destroy ...거의 1.5시간 후에 정리가 성공적으로 완료되었습니다. 하지만 존경하는 테이블은 변경되지 않았습니다. 그러나 거의 모든 항목은 더 이상 추가 정보를 참조하지 않는 고아입니다.

다른 소스와 관련하여 이 동작은 일반적이며 의도된 것입니다. 그러나 제 생각에는 완전히 말도 안되고 쓸모가 없습니다. 깨끗하고 축소된 데이터베이스를 얻기 위해 이 단계를 수행했습니다.

이 문제를 제거하는 방법에 대한 아이디어나 권장 사항이 있습니까? 실제로 SQL 쿼리를 사용하여 데이터베이스에서 분리된 항목을 삭제할 수 있지만 전문가들은 예상치 못한 동작과 관련하여 이를 엄격히 권장합니다. 당신의 경험은 무엇입니까?

답변1

"빌드 정보 정리 작업"이 실행될 때까지 기다려야 합니다(기본적으로 2일마다 실행됨). 이는 TFSBuild.exe deleteand 를 실행한 후 tbl_buildInformation을 정리하는 작업입니다 TFSBuild.exe destroy.

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)

이 작업의 다음 실행이 예약된 시기를 실제로 확인하려면 DB로 이동하여 다음 쿼리를 실행해야 합니다. 쿼리는 "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자세한 내용은.

관련 정보