如何缩减AzureDevOps(又名TFS)数据库大小并回收磁盘空间
关于Azure DevOps/TFS tbl_content清理与磁盘空间回收的问题解答
1. prc_CleanupDeletedFileContent 和 prc_DeleteUnusedFiles 是否会删除tbl_content中的记录?
这两个存储过程是配合完成清理的,分工明确:
prc_DeleteUnusedFiles:不会直接删除tbl_content记录,它负责扫描系统内所有文件的引用关系(比如构建、发布、工件的关联链路),把无任何有效引用的文件标记为删除状态(更新tbl_FileMetadata等关联表的状态字段)。prc_CleanupDeletedFileContent:会真正删除tbl_content中的记录。它会筛选出已被标记为删除且超过指定保留期的文件内容,从tbl_content中移除对应的二进制数据记录。
简单来说:前者负责标记“该删的文件”,后者负责真正清理tbl_content里的废弃内容。
2. 回收磁盘空间的完整步骤
前置准备
- 必须先备份项目集合数据库:执行任何数据库级清理操作前,务必备份,避免数据丢失。
- 选择Azure DevOps/TFS服务低峰期操作,清理过程会占用数据库资源,可能影响系统性能。
执行清理流程
运行
prc_DeleteUnusedFiles
打开SQL Server Management Studio,连接到Azure DevOps/TFS的项目集合数据库,执行:EXEC prc_DeleteUnusedFiles该过程会扫描所有文件引用,标记无引用的文件为待删除,耗时根据数据库大小而定。
运行
prc_CleanupDeletedFileContent
接着执行:EXEC prc_CleanupDeletedFileContent该过程会清理
tbl_content中已标记为删除的记录,释放数据库内部空间。收缩数据库数据文件
SQL Server删除记录后,会把空间标记为数据库内部可用,但不会主动还给操作系统。需要手动收缩数据文件(注意:频繁收缩会导致索引碎片,建议仅在清理后执行一次):DBCC SHRINKFILE ('你的数据库数据文件名', TRUNCATEONLY)可通过
SELECT name FROM sys.database_files WHERE type = 0查询实际的数据文件名,替换上述语句中的占位符。后续维护建议
- 定期(比如每月一次)执行上述清理流程,配合你的60天工件保留策略,持续管控数据规模。
- 清理后建议重建
tbl_content和关联表的索引,修复收缩带来的碎片问题:ALTER INDEX ALL ON tbl_content REBUILD
内容的提问来源于stack exchange,提问作者sarvin
相关产品推荐
相关产品推荐

