Мы используем TFS 2012 с 2013 года. За это время база данных увеличилась до ~ 60 ГБ. У этого есть несколько недостатков, таких как увеличенное время резервного копирования, бесполезная трата места на диске, ...
Изучив отчет «Использование диска по верхним таблицам», я понял, что tbl_BuildInformation
стол был взорван. 46 ГБ из 60 ГБ используются для хранения / архивирования информации о прошлых сборках (журнал сборки и т. Д.). И у нас нет никакой цели больше использовать эту информацию.
Поэтому я последовал предложениям на форумах MSDN, как их очистить. Я применил две команды (tfsbuild.exe delete ...
и tfsbuild.exe destroy ...
) на наш TFS-сервер. Почти через 1,5 часа очистка была успешно завершена. Но почтительный стол не изменился. Но почти все записи - сироты, без каких-либо ссылок на дополнительную информацию.
Что касается других источников, это обычное и преднамеренное поведение. Но на мой взгляд абсолютно чушь и бесполезная. Я сделал эти шаги, чтобы получить чистую и сжатую базу данных.
Есть идеи или рекомендации, как от этого избавиться? На самом деле я мог бы удалить потерянные записи в базе данных с помощью SQL-запроса, но эксперты категорически не рекомендуют этого в отношении неожиданного поведения. Какой у вас опыт?
Вам нужно подождать, пока не запустится «Задание по очистке информации о сборке» (по умолчанию оно запускается каждые два дня). Это задание, которое очищает 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/introduction-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 Чтобы получить больше информации.