tfsbuild.exe delete / destroy хранит сирот в базе данных

Мы используем TFS 2012 с 2013 года. Тем временем база данных увеличилась до ~60 ГБ. Это имеет несколько недостатков, таких как увеличение времени резервного копирования, потеря дискового пространства,...

Изучив отчет "Использование диска по верхним таблицам", я понял, что tbl_BuildInformation стол был взорван. 46 ГБ из 60 ГБ используются для хранения / архивирования информации о прошлой сборке (журнал сборки и т. Д.). И у нас нет абсолютно никакой цели использовать эту информацию больше.

Поэтому я следовал советам на форумах MSDN, как их чистить. Я применил две команды (tfsbuild.exe delete ... а также tfsbuild.exe destroy ...) на наш сервер TFS. Спустя почти 1,5 часа очистка была успешно завершена. Однако, уважаемая таблица не изменилась. Но почти все записи являются сиротами без ссылки на дополнительную информацию.

Что касается других источников, это поведение является распространенным и предполагаемым. Но на мой взгляд абсолютно бессмысленный и бесполезный. Я сделал это, чтобы получить чистую и сжатую базу данных.

Есть идеи или рекомендации, как от этого избавиться? На самом деле, я мог удалить осиротевшие записи в базе данных с помощью SQL-запроса, но эксперты строго рекомендуют это в отношении непредвиденного поведения. Каковы ваши переживания?

1 ответ

Вам нужно подождать, пока не запустится "Задание очистки информации о сборке" (по умолчанию оно запускается каждые два дня). Это работа, которая очищает tbl_buildInformation после запуска TFSBuild.exe delete а также 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)

Чтобы на самом деле увидеть, когда запланирован следующий запуск этого задания, необходимо перейти к БД и выполнить следующий запрос (запрос не совсем корректен, поскольку он показывает в столбцах "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 для получения дополнительной информации.

Другие вопросы по тегам