Как уменьшить быстрорастущую таблицу TFS 2017 tbl_content - PullRequest
0 голосов
/ 23 октября 2018

Мы используем конвейеры TFS 2017 CI / CD, и это прекрасно работает.Тем не менее, базы данных TFS 2017 растут в среднем около 1 ГБ в день.Одна база данных увеличивается с 10 ГБ до 44 ГБ по состоянию на 23.10.2008.Рост медленно становится для нас неустойчивым.Мы уже скорректировали политику хранения до минимума.

Исследовал и прочитал не менее 30 статей.Вот некоторые соответствующие статьи:

TFS tbl_Content начал очень быстро расти после использования VNext build

https://mattyrowan.com/2014/04/02/need-help-tfs-tbl_content-table-and-database-growth-out-of-control/

https://developercommunity.visualstudio.com/content/problem/63712/tfs-database-size.html

Вот что я сделал до сих пор:

  1. Пересматривал снова и снова политики хранения и сокращал до минимума (1 день 1 копия).Отрегулировано «Оставить удаленным» в течение 10 дней.

  2. Снимите флажок «Сохранить сборку» в определении выпуска

  3. Запустите сценарии из трех упомянутых статейвыше и найдено:

    a) FileContainer, содержит 149176 файлов, 43 ГБ, (сжатых 34 ГБ)

    b) FileContainerOwner: Build, 29 ГБ

Таким образом, основной причиной роста является Build (и артефакты).

У меня вопрос, как уменьшить размер базы данных?

Я смотрю на вкладках «История» и «Удалено».'под определениями сборки.

  1. Некоторые записи в «Журнале» заблокированы с помощью «Сохранено выпуском».Я могу нажать на записи и удалить.Но это ничего не делает.Записи все еще там.

  2. Все записи в «Удаленные» все еще там.

Итак, вернемся к моему вопросу еще раз, как мне удалить эти записи, чтобы освободить место?

Спасибо.

1 Ответ

0 голосов
/ 26 октября 2018

После сброса RetainedByRelease в false и ожидания не менее 24 часов, всплеск роста прекратился и записи в tbl_content ежедневно удалялись.

Итак, в итоге я также сделал это:

Сброс RetainedByRelease в false с использованием TFS REST API после nuget Microsoft.VisualStudio.Services.Client

Особая благодарность этим двум потокам:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/5f649821-b1bf-4008-bba9-0c960e124abb/tfs-releasemanagement-vnext-quotthis-build-has-been-retained-by-a-releasequot-issue?forum=tfsbuild

Попытка получить список пользователей TFS через клиентскую библиотеку

Полный исходный код, чтобы помочь другим разработчикам:

using Microsoft.TeamFoundation.Build.WebApi;
using Microsoft.TeamFoundation.Core.WebApi;
using Microsoft.VisualStudio.Services.Client;
using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.WebApi;
using System;

namespace TfsRestAPIs
{
    public class RestAPI
    {
        public static void UpdateRetainedByRelaseToFalse()
        {
            Uri tfsURI = new Uri("http://TFS2017:8080/tfs/YourProjectCollection");
            VssCredentials creds = new VssClientCredentials();
            creds.Storage = new VssClientCredentialStorage();
            VssConnection connection = new VssConnection(tfsURI, creds);
            var projectClient = connection.GetClient<ProjectHttpClient>();
            var projects = projectClient.GetProjects().Result;
            var buildClient = connection.GetClient<BuildHttpClient>();            

            foreach (var project in projects)
            {
                Log(project.Name);
                if (project.Name == "YourProjectName")
                {
                    var builds = buildClient.GetBuildsAsync(project.Id).Result;
                    foreach (Build build in builds)
                    {
                        if (build.BuildNumber.StartsWith("YourSearchCondition"))
                            try
                            {                                
                                if (build.RetainedByRelease.Value)
                                {
                                    Log(build.BuildNumber + "'s RetainedByRelease=true");
                                    build.RetainedByRelease = false;
                                    var res = buildClient.UpdateBuildAsync(build, build.Id).Result;
                                    Log("  --> RetainedByRelease is set to " + res.RetainedByRelease.Value);
                                }
                            }
                            catch (Exception e)
                            {
                                Log(build.BuildNumber + ":" + e.Message);
                            }
                    }
                }
            }
        }

        private static void Log(string msg)
        {
            Console.WriteLine(msg);
        }
    }
}
...