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