tfsbuild.exe delete / destroy mantém órfãos no banco de dados

1

Estamos usando o TFS 2012 desde 2013. Nesse meio tempo, o banco de dados aumentou para ~ 60 GB. Isso tem várias desvantagens, como o aumento do tempo de backup, o desperdício de espaço em disco, ...

Depois de dar uma olhada no relatório 'Uso de disco por tabelas principais', reconheci que a tabela tbl_BuildInformation foi ampliada. 46 GB a partir de 60 GB são usados para armazenar / arquivar informações de compilação anteriores (registro de compilação assim por diante). E não temos absolutamente nenhum propósito de usar essas informações mais.

Portanto, segui as sugestões nos fóruns do MSDN como limpá-las. Eu apliquei os dois comandos ( tfsbuild.exe delete ... e tfsbuild.exe destroy ... ) ao nosso servidor TFS. Após quase 1,5h a limpeza foi feita com sucesso. A tabela respeitando não mudou, no entanto. Mas quase todas as entradas são órfãs, sem referência a qualquer informação adicional.

Em relação a outras fontes, esse comportamento é comum e intencional. Mas na minha opinião absolutamente absurdo e inútil. Eu fiz essas etapas para obter um banco de dados limpo e reduzido.

Alguma idéia ou recomendação de como se livrar disso? Na verdade, eu poderia excluir as entradas órfãs no banco de dados com uma consulta SQL, mas os especialistas aconselham estritamente contra esse comportamento inesperado. Quais são suas experiências?

    
por dannyyy 22.05.2015 / 09:31

1 resposta

2

Você precisa esperar até que a "Tarefa de limpeza de informações de compilação" seja executada (por padrão, ela é executada a cada dois dias). Esta é a tarefa que limpa o tbl_buildInformation depois de executar TFSBuild.exe delete e TFSBuild.exe destroy .

Você pode verificar sua programação com (no 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))

Para enfileirar o trabalho para execução imediata, execute os comandos anteriores seguidos pelo seguinte comando:

$jobService.QueueJobNow([Guid] $job.JobId, $false)

Para alterar o agendamento, execute:

$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)

Para ver realmente quando a próxima execução deste trabalho está agendada, você precisa ir ao banco de dados e executar a consulta a seguir (a consulta não está totalmente correta, pois mostra nas colunas "ScheduledTime" e "Interval" as informações de Tfs_YourCollection para todas as coleções listadas, as outras informações estão corretas, especialmente o 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'

Veja link e link para mais informações.

    
por 06.10.2015 / 10:58