tfsbuild.exe eliminar/destruir mantiene a los huérfanos en la base de datos

tfsbuild.exe eliminar/destruir mantiene a los huérfanos en la base de datos

Estamos usando TFS 2012 desde 2013. Mientras tanto, la base de datos ha aumentado hasta ~60 GB. Esto tiene varios inconvenientes, como mayor tiempo de copia de seguridad, pérdida de espacio en el disco,...

Después de echar un vistazo al informe "Uso del disco por tablas principales", reconocí que la tbl_BuildInformationtabla había sido ampliada. 46 GB de 60 GB se utilizan para almacenar/archivar información de compilación anterior (registro de compilación, etc.). Y ya no tenemos ningún propósito para utilizar esta información.

Por lo tanto, seguí las sugerencias en los foros de MSDN sobre cómo limpiarlos. Apliqué los dos comandos ( tfsbuild.exe delete ...y tfsbuild.exe destroy ...) a nuestro servidor TFS. Después de casi 1,5 h, la limpieza se realizó con éxito. Sin embargo, la mesa de respeto no ha cambiado. Pero casi todas las entradas son huérfanas y ya no hacen referencia a más información.

Respecto a otras fuentes, este comportamiento es común y intencionado. Pero en mi opinión es absolutamente absurdo e inútil. Seguí estos pasos para obtener una base de datos limpia y reducida.

¿Alguna idea o recomendación sobre cómo deshacerse de esto? En realidad, podría eliminar las entradas huérfanas de la base de datos con una consulta SQL, pero los expertos desaconsejan estrictamente esto relacionado con comportamientos inesperados. ¿Cuáles son tus experiencias?

Respuesta1

Debe esperar hasta que se ejecute el "Trabajo de limpieza de información de compilación" (de forma predeterminada, se ejecuta cada dos días). Este es el trabajo que limpia tbl_buildInformation después de ejecutar TFSBuild.exe deletey TFSBuild.exe destroy.

Puede consultar su programación con (en 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 poner en cola el trabajo para ejecutarlo inmediatamente, ejecute los comandos anteriores seguidos del siguiente comando:

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

Para cambiar el horario, ejecute:

$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 cuando está programada la próxima ejecución de este trabajo, debe ir a la base de datos y ejecutar la siguiente consulta (la consulta no es completamente correcta porque muestra en las columnas "ScheduledTime" e "Interval" la información de Tfs_YourCollection para todas las colecciones enumeradas, el resto de la información es correcta, especialmente 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/introduciendo-the-tfs-background-job-agent-and-service.aspxyhttp://blogs.msdn.com/b/granth/archive/2013/02/13/tfs2012-what-are-all-the- Different-jobs-built-in-to-tfs.aspxpara más información.

información relacionada