我们使用TFS 2017 CI / CD管道,效果很好。但是,TFS 2017数据库平均每天增长约1GB。截至2018年10月23日,一个数据库从10GB增长到44GB。增长对我们而言逐渐变得不可持续。我们已经将保留政策调整到最低限度。
研究并阅读了至少30篇文章。以下是一些相关文章:
使用VNext构建后,TFS tbl_Content开始快速增长
https://developercommunity.visualstudio.com/content/problem/63712/tfs-database-size.html
这是我到目前为止所做的:
一次又一次地审查了保留政策,并减少到最少(1天1份)。将“保留已删除”调整为10天。
在发布定义中取消选中“保留内部版本”框
运行上述三篇文章中的脚本,并发现:
a)FileContainer,具有149176个文件,43GB,(压缩后为34GB)
b)FileContainerOwner:内部版本,29GB
因此,增长的主要原因是Build(和工件)。
我的问题是如何缩小数据库大小?
我查看构建定义下的“历史记录”和“已删除”标签。
“历史记录”中的某些记录被“通过释放保留”锁定。我可以单击记录并删除。但是它什么也没做。记录仍然存在。
“已删除”中的所有记录仍然存在。
因此,再次回到我的问题,如何删除这些记录以便可以回收空间?
谢谢。
将RetainedByRelease重置为false并等待至少24小时后,增长突增停止,并且每天删除tbl_content中的条目。
因此,在总结中,我也这样做了:
特别感谢以下两个线程:
可以帮助开发人员的完整源代码:
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);
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句