
Estamos usando o TFS 2012 desde 2013. Nesse meio tempo, o banco de dados aumentou para aproximadamente 60 GB. Isso tem várias desvantagens, como aumento do tempo de backup, desperdício de espaço em disco, ...
Depois de dar uma olhada no relatório 'Uso de disco pelas principais tabelas', reconheci que a tbl_BuildInformation
tabela explodiu. 46 GB de 60 GB são usados para armazenar/arquivar informações de compilação anteriores (log de compilação e assim por diante). E não temos mais absolutamente nenhum propósito de usar essas informações.
Portanto, segui as sugestões nos fóruns do MSDN sobre como limpá-los. Apliquei os dois comandos ( tfsbuild.exe delete ...
e tfsbuild.exe destroy ...
) ao nosso servidor TFS. Depois de quase 1,5h, a limpeza foi realizada com sucesso. A tabela de respeito não mudou, no entanto. Mas quase todas as entradas são órfãs, sem mais referência a qualquer informação adicional.
Em relação a outras fontes este comportamento é comum e intencional. Mas, na minha opinião, absolutamente absurdo e inútil. Eu executei essas etapas para obter um banco de dados limpo e reduzido.
Alguma idéia ou recomendação sobre como se livrar disso? Na verdade, eu poderia excluir as entradas órfãs do banco de dados com uma consulta SQL, mas os especialistas desaconselham estritamente isso em relação ao comportamento inesperado. Quais são suas experiências?
Responder1
Você deve esperar até que o "Build Information Cleanup Job" seja executado (por padrão, ele é executado a cada dois dias). Este é o trabalho que limpa 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 colocar o trabalho na fila para execução imediata, execute os comandos anteriores seguidos do seguinte comando:
$jobService.QueueJobNow([Guid] $job.JobId, $false)
Para alterar a programação, 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 realmente ver quando a próxima execução deste job está agendada, você deve ir ao banco de dados e executar a seguinte consulta (a consulta não está completamente correta porque mostra nas colunas "ScheduledTime" e "Interval" as informações de Tfs_YourCollection para todas as coleções listadas, as demais informações estão corretas, principalmente 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'
Verhttp://blogs.msdn.com/b/chrisid/archive/2010/02/15/introduzindo-the-tfs-background-job-agent-and-service.aspxelinkPara maiores informações.