Azure DevOps Server: тестовые вложения (файлы TRX) не удаляются для старых сборок конвейера.

Я использую Azure DevOps Server (локальный) v2020, обновление 1.2 (v18.181.32404.7).

Мы готовимся к переходу на службу Azure DevOps (облако), но наша база данных огромна, и мы пытаемся ее очистить.

TL;DR: В таблице содержится почти 60 ГБ тестовых вложений, и многие из этих вложений продолжают существовать, несмотря на то, что в таблице нет соответствующей записи.

Если посмотреть на базу данных коллекции проектов, то она, безусловно, самая большая — занимает около 110 ГБ. Я запустил следующий запрос, который идентифицирует «командного теста» как владельца почти 60 ГБ этого файла:

      SELECT SUM(m.CompressedLength) / 1024.0 / 1024.0 AS BlobSizeInMB
FROM tbl_FileReference AS r
JOIN tbl_FileMetadata AS m
ON r.ResourceId = m.ResourceId
AND r.PartitionId = m.PartitionId
WHERE r.PartitionId = 1
AND OwnerId = 4

Результат этого запроса:

Я создал запрос, который покажет мне вложения (контент) для конкретной сборки. Вот пример, где я запускаю запрос для сборки 64447, которая принадлежит определению сборки с ID=600:

      SELECT
r.FileId,
r.ResourceId,
r.CreationDate,
a.FileName,
bc.BuildUri,
bc.BuildId,
bc.BuildNumber,
bc.BuildDefinitionId,
bd.DefinitionName,
r.DeletedOn,
b.BuildId as BuildIdFromBuildTable,
CompressedLength / 1024.0 / 1024.0 AS BlobSizeInMB
FROM tbl_FileReference AS r
LEFT JOIN tbl_FileMetadata AS m
ON r.ResourceId = m.ResourceId
AND r.PartitionId = m.PartitionId
left join tbl_Attachment a on r.FileId = a.TfsFileId
left join tbl_TestRun tr on a.TestRunId = tr.TestRunId
left join [tbl_BuildConfiguration] bc on tr.BuildConfigurationId = bc.BuildConfigurationId
left join Build.tbl_Definition bd on bc.BuildDefinitionId = bd.DefinitionId
left join tbl_Content content on content.ResourceId = r.ResourceId
left join Build.tbl_Build b on b.BuildId = bc.BuildId
WHERE r.PartitionId = 1
AND OwnerId = 4
AND BuildDefinitionId = 600
AND bc.BuildId = 64447
ORDER BY r.CreationDate DESC

Это дает мне кучу записей, которые выглядят следующим образом:

Итак, я вижу, что эти записи вложений ДЕЙСТВИТЕЛЬНО существуют и занимают место вtbl_Content, но посколькуBuildIdFromBuildTableстолбец показываетNULL, мы видим, что ни для одной сборки с идентификатором 64447 в файле нет записей.Build.tbl_Buildтаблица (я также проверилdbo.tbl_Buildпросто для безопасности).

Таким образом, похоже, что хотя сборка была удалена некоторое время назад, вложения для этой сборки все еще существуют и занимают много ГБ данных в нашей базе данных TFS.

Я попробовал запуститьtfsbuild destroyкоманду для коллекции для правильного проекта и диапазона дат, окружающего дату этой сборки, однако там говорится, что удаленные сборки не найдены.

Как я могу избавиться от этого значительного количества потерянных данных вложений сборки?

1 ответ

Это было решено, выполнив следующие действия:

  1. БегTfsConfig deleteTestResults
  2. ЗапускCleanup TestManagement Databaseработа,
  3. БегEXEC prc_CleanupDeletedFileContent 1иEXEC prc_DeleteUnusedFiles 1, 0, 1000

Это заняло около 26 ГБ базы данных. Большое спасибо @WeiyingZhang из Microsoft, который предложил номер 1 по адресу https://developercommunity.visualstudio.com/t/Azure-DevOps-Server:-Test-attachments-T/10490633?viewtype=all .

Другие вопросы по тегам