Использование TfsPreUpgrade для сокращения времени простоя

Azure DevOps Server 2022 г. | Azure DevOps Server 2020 г. | Azure DevOps Server 2019 г.

Требования

TfsPreUpgrade поддерживается только для развертываний Team Foundation Server, которые:

  • Иметь соответствующие базы данных коллекций в выпуске Enterprise SQL Server.
  • Используйте соответствующие базы данных коллекций в SQL Server 2012 с пакетом обновления 1 (SP1) (или более поздней версии) или SQL Server 2014 с накопительным пакетом обновления 3 (CU3) или более поздней версии.

Дополнительную информацию см. ниже.

Введение

Team Foundation Server 2015 включает изменения схемы в большое количество таблиц для поддержки переименования проектов. В результате обновление до Team Foundation Server 2015 может занять значительное время в зависимости от размера базы данных. Так как обновления TFS выполняются в автономном режиме, корпорация Майкрософт предоставляет средство, TfsPreUpgrade.exe, которое можно использовать для выполнения самых дорогостоящих этапов работы по обновлению до TFS 2015, пока развертывание TFS 2013 все еще находится в сети. Вам не нужно запускать это средство перед обновлением. Мы рекомендуем запускать ее для баз данных коллекций, размер которых превышает 1 ТБ, чтобы сократить время, в течение которых TFS будет находиться в автономном режиме.

Как правило, TfsPreUpgrade.exe работает путем создания новых копий таблиц, наиболее затронутых изменениями схемы в TFS 2015, а затем путем переноса данных из исходных таблиц в новые копии. Для обработки текущих действий пользователей он также помещает триггеры, которые сохраняют изменения в исходных таблицах, передаваемых в новые копии. Корпорация Майкрософт значительно оптимизировала TfsPreUpgrade.exe, чтобы свести к минимуму влияние на производительность серверов и пользователей, но она может и будет влиять на производительность. Для больших операций, таких как система управления версиями Team Foundation (TFVC) создание и удаление ветвей, это может привести к неудовлетворенности пользователей и даже к превышению времени ожидания базы данных. Полный список операций, которые, как известно, были затронуты, см. ниже.

В результате TfsPreUpgrade.exe следует запускать как можно ближе к запланированной дате обновления в автономном режиме, при этом сохраняя время для завершения работы, и запускаться в период, в котором можно избежать этих больших операций. Многие факторы будут учитывать, сколько времени потребуется TfsPreUpgrade.exe, но мы обычно ожидаем, что это займет две недели или меньше, и поэтому обычно рекомендуется начать TfsPreUpgrade.exe за две недели до запланированного автономного обновления. TfsPreUpgrade.exe можно предоставить приблизительную оценку того, сколько времени потребуется для выполнения, выполнив команду Estimate.

TfsPreUpgrade.exe Estimate /TargetDatabaseNames:"{SQL Instance};{Collection Database Name}"

Из-за принципов работы TfsPreUpgrade.exe требуются стабильные схемы исходной и целевой баз данных. Таким образом, его можно запускать только в базах данных TFS 2013 с обновлением 4 и 5. Если развертывание TFS еще не использует TFS 2013 с обновлением 4 или 5, необходимо выполнить обновление до одной из этих версий перед запуском TfsPreUpgrade.exe. Обновление 5 для TFS 2013 можно скачать здесь.

Что делает TfsPreUpgrade.exe?

TfsPreUpgrade.exe выполняет следующие действия:

  • Включите сжатие для небольшого количества таблиц, которые не были сжаты в 2013 году, но будут в 2015 году.
  • Проверьте и исправьте очень редкие, но хорошо понятные повреждения данных в системе управления версиями TFS.
  • Создайте новые таблицы и перенесите в них существующие данные.
  • Создание триггеров.
  • Обновление хранимых процедур.
  • Создание индексов. (Корпоративные выпуски SQL Server необходимы для выполнения этих операций в сети.)

Так как он создает новые таблицы для переноса данных в сети, TfsPreUpgrade.exe требуется потенциально большой объем дополнительного места на диске как для данных, так и для журналов транзакций. При выполнении TfsPreUpgrade.exe будет проверка, чтобы узнать, доступен ли уже этот объем пространства. В противном случае будет предпринята попытка предварительно выделить этот объем пространства. В случае сбоя возникает ошибка. TfsPreUpgrade.exe может предоставить оценку объема пространства, который будет пытаться предварительно выделить, выполнив команду Estimate.

TfsPreUpgrade.exe Estimate /TargetDatabaseNames:"{SQL Instance};{Collection Database Name}"

Поскольку TfsPreUpgrade.exe выполняет потенциально ресурсоемкие операции (массовое копирование данных, создание индексов и т. д.), это может повлиять на производительность сервера. Корпорация Майкрософт не ожидает, что это влияние будет существенным, и мы оптимизировали операции, выполняемые TfsPreUpgrade.exe, чтобы свести к минимуму влияние на ваши серверы и пользователей. Если во время выполнения TfsPreUpgrade.exe возникают проблемы с производительностью, ее всегда можно отменить, нажав клавиши CTRL+C. TfsPreUpgrade.exe записывается таким образом, что отмена отменяет выполняемые операции. Она никогда не должна оставлять базу данных в плохом состоянии, и всегда может быть повторно запущена несколько раз, если она завершает работу до завершения.

Так как TfsPreUpgrade.exe создает триггеры, которые синхронизируют исходную и новую копии таблиц после первоначальной миграции, даже после отмены TfsPreUpgrade.exe это может по-прежнему влиять на производительность сервера. Опять же, корпорация Майкрософт не ожидает, что это влияние будет существенным, и мы оптимизировали производительность этих триггеров, чтобы свести к минимуму влияние на ваши серверы и пользователей. Если после отмены TfsPreUpgrade.exe по-прежнему возникают проблемы с производительностью, можно использовать команду TfsPreUpgrade.exe Revert, чтобы отменить большинство действий, выполняемых командой Выполнить. Revert удалит все триггеры, установленные командой Выполнить, удалит все созданные таблицы и т. д. Набор действий, выполняемых командой Run, которые не были отменены с помощью Revert, см. ниже.

Операции TFVC, которые работают с очень большим количеством элементов, скорее всего, будут негативно затронуты триггерами, созданными TfsPreUpgrade.exe. По возможности избегайте этих операций TFVC во время выполнения TfsPreUpgrade.exe и до завершения автономного обновления до TFS 2015.

  • Создание, удаление и переименование ветвей.
  • Уничтожайте операции, влияющие на большое количество элементов.
  • Удаление проектов, использующих TFVC.

Если вам нужно выполнить эти операции, можно ожидать, что выполнение этих операций займет по крайней мере в два раза больше времени с помощью триггеров TfsPreUpgrade.

Разделы справки запустить TfsPreUpgrade.exe?

Рекомендуемая процедура запуска TfsPreUpgrade.exe:

  1. Скачайте TfsPreUpgrade.exe. Обратите внимание, что компьютер, на котором устанавливается TfsPreUpgrade, не имеет значения, если он может получить доступ к соответствующим экземплярам SQL. Он поставляется в zip-архиве со всеми своими зависимостями.

  2. Распакуть его в локальный каталог.

  3. Определите, в каких базах данных коллекций вы хотите запускать TfsPreUpgrade.exe. Он может выполняться в любых базах данных коллекции без негативного влияния на их возможности обновления, но обычно требуется только для баз данных, которые достаточно велики, чтобы требовать значительного простоя во время автономного обновления. Корпорация Майкрософт рекомендует использовать TfsPreUpgrade.exe для баз данных размером более 1 ТБ.

  4. Как пользователь, который является системным администратором в экземпляре SQL (TfsPreUpgrade задает несколько traceflags во время выполнения), выполните команду Run:

    TfsPreUpgrade.exe Run /TargetDatabaseNames:"{Экземпляр SQL}; {Имя базы данных коллекции}"

  5. Если вы хотите запустить TfsPreUpgrade.exe в нескольких базах данных коллекций, можно либо использовать несколько вызовов TfsPreUpgrade.exe (в этом случае они будут выполняться параллельно), либо указать несколько строк экземпляра SQL с разделительной точкой или базы данных коллекции в одном вызове (в этом случае они будут выполняться последовательно).

TfsPreUpgrade.exe будет выполняться в течение довольно долгого времени в зависимости от размера баз данных коллекции, с которыми она выполняется. Он будет сообщать о прогрессе по пути, чтобы вы могли иметь некоторое представление о том, как далеко он находится и сколько времени может остаться. После завершения TfsPreUpgrade.exe устанавливаемые триггеры сохранят любые дополнительные изменения, внесенные из-за того, что сервер подключен к перенесенным таблицам. Таким образом, нет необходимости повторно запускать его перед выполнением автономного обновления до TFS 2015.

Статистика оттока кода

Одним из дополнительных вариантов, которые можно учитывать при выполнении TfsPreUpgrade.exe, является пропуск миграции статистики оттока кода, превышающей некоторое пороговое значение. Статистика оттока кода вычисляется фоновым процессом, когда изменения возвращаются в TFVC и хранятся в одной из таблиц, перенесенных TfsPreUpgrade.exe. Затем эти данные поступают в хранилище и куб и могут использоваться в отчетах. Дополнительные сведения см. в этом разделе .

Если вам не интересны старые статистические данные об оттоке кода (или если какая-либо статистика оттока кода вас не интересует), вы можете сэкономить некоторое время во время выполнения TfsPreUpgrade.exe и последующего выполнения автономного обновления, пропустив перенос статистики старше заданной даты. Это можно сделать с помощью необязательного параметра /SkipCodeChurnBefore для команды Run. Например, если вы хотите пропустить перенос статистики оттока кода до 1 января 2015 г., можно использовать следующую командную строку:

TfsPreUpgrade.exe Run /TargetDatabaseNames:"{SQL Instance};{Collection Database Name}" /SkipCodeChurnBefore:"1/1/2015"

Если вы используете этот параметр, соответствующая статистика оттока кода не будет перенесена и не будет присутствовать в хранилище и кубе после обновления в автономном режиме.

Автономное обновление до TFS 2015

Теперь вы готовы выполнить автономное обновление до TFS 2015, для которого можно выполнить обычные процедуры обновления TFS.

Дополнительные сведения о некоторых редко выполняемых операциях, которые блокируются TfsPreUpgrade.exe, см. ниже, а также дополнительные сведения об изменениях базы данных, внесенных TfsPreUpgrade.exe которые не были отменены при выполнении TfsPreUpgrade.exe Revert.

Заблокированные операции

На раннем этапе выполнения TfsPreUpgrade.exe несколько триггеров безопасности, чтобы блокировать операции, которые были разрешены TFS 2013, но либо больше не разрешены TFS 2015, либо могут вызвать проблемы при наличии триггеров, созданных TfsPreUpgrade.exe. К ним относятся следующие объекты.

  1. Удаление проектов. Не рекомендуется удалять проекты после запуска TfsPreUpgrade.exe в базе данных коллекции. При удалении проекта произойдет сбой непосредственно перед завершением удаления, в результате чего проект останется в состоянии Удаления. Удаление проекта будет поддерживаться снова после обновления до TFS 2015.
  2. Создание рабочих областей со ссылками на корневые папки, которые не существуют. Они завершатся ошибкой TF10169. Обратите внимание, что один из сценариев, в котором это может возникнуть в определениях сборок, шаблоны рабочих областей которых ссылаться на корневые папки, которые не существуют. В этих сценариях сборки могут завершиться сбоем во время создания рабочей области с заданной ошибкой. Этот сценарий будет по-прежнему не поддерживаться в TFS 2015 из-за изменений, связанных с переименованием Project, но произойдет сбой с более актуальным сообщением об ошибке.
  3. Вызов VersionControlServer.CreateTeamProjectFolder() с помощью кода, написанного для клиентской модели TFS. Эта ошибка завершится ошибкой TF10169. Этот сценарий будет по-прежнему не поддерживаться в TFS 2015 из-за изменений, связанных с переименованием командного проекта, но произойдет сбой с более актуальным сообщением об ошибке.

Исключения для TfsPreUpgrade.exe отмены

Запуск TfsPreUpgrade.exe имеет ряд побочных эффектов, которые не отменяются при выполнении TfsPreUpgrade.exe Отмена. Наиболее интересно, что любое предварительно выделенное пространство базы данных и (или) журнала транзакций, выполненное TfsPreUpgrade.exe, не будет отменено. Это означает, что файлы базы данных могут быть значительно больше, чем до запуска TfsPreUpgrade.exe. Однако дополнительное пространство не будет использовано, так как дополнительные таблицы, созданные TfsPreUpgrade.exe, будут удалены. Рекомендуется оставить это пространство, так как оно будет естественным образом заполнено по мере того, как размер данных в файлах базы данных увеличится, а также потому, что оно потребуется в конечном итоге при обновлении до TFS 2015.

Другие побочные эффекты, которые не отменены, не оказывают влияния и перечислены здесь только для вашей информации. Эти изменения в любом случае были бы сделаны путем обновления до TFS 2015 и не должны влиять на работу сервера или на его возможное обновление.

  1. Все повреждения, обнаруженные и исправленные в данных управления версиями TFS, не будут возвращены.
  2. Столбец, добавленный в tbl_Version скриптом обнаружения и исправления повреждений, не удаляется.
  3. В таблицах, для которых включено сжатие, оно больше не будет отключено.