使用 TfsPreUpgrade 減少停機時間

Azure DevOps Server 2022 |Azure DevOps Server 2020 |Azure DevOps Server 2019

規格需求

只有 Team Foundation Server 部署才支援 TfsPreUpgrade,其:

  • 在企業版 SQL Server 上擁有其相關的集合資料庫。
  • 在 SQL Server 2012 SP1 (或更新版本) 或 SQL Server 2014 CU3 (或更新版本) 上擁有相關的集合資料庫。

如需詳細資訊,請參閱下方內容。

簡介

Team Foundation Server 2015 包含大量數據表的架構變更,以支援重新命名專案。 因此,升級至Team Foundation Server 2015 可能需要大量時間,視資料庫的大小而定。 由於 TFS 升級已離線,因此 Microsoft 提供工具 TfsPreUpgrade.exe,可用來執行最昂貴的部分工作來升級至 TFS 2015,而您的 TFS 2013 部署仍在在線。 升級之前,您不需要執行此工具。 建議您針對超過 1 TB 大小的集合資料庫執行它,以減少 TFS 必須離線的時間。

一般而言,TfsPreUpgrade.exe 的運作方式是建立受到 TFS 2015 中架構變更影響之數據表的新複本,然後將數據從原始數據表移轉至新的複本。 為了處理進行中的用戶活動,它也會讓觸發程式隨時變更流向新復本的原始數據表。 Microsoft 已廣泛優化 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 Update 4 和 Update 5 資料庫執行。 如果您的 TFS 部署尚未在 TFS 2013 Update 4 或 5 上,您必須先升級至其中一個版本,再執行 TfsPreUpgrade.exe。 您可以 在這裡下載 TFS 2013 Update 5。

TfsPreUpgrade.exe 的功能為何?

TfsPreUpgrade.exe 會執行下列動作:

  • 針對 2013 年未壓縮但將於 2015 年壓縮的少量數據表啟用壓縮。
  • 掃描並修正 TFS 版本控制數據中非常罕見但瞭解良好的數據損毀。
  • 建立新的數據表,並將現有的數據遷移至它們。
  • 建立觸發程式。
  • 更新預存程式。
  • 建立索引。 需要 (Enterprise 版本的 SQL Server,才能讓這些作業在在線執行。)

由於它會建立新的數據表,以便以在線方式移轉數據,因此 TfsPreUpgrade.exe 需要數據與事務歷史記錄所需的額外磁碟空間量可能很大。 在執行 TfsPreUpgrade.exe 時,它會檢查該空間量是否已可用。 如果沒有,它會嘗試預先配置該多空間。 如果失敗,則會產生錯誤。 TfsPreUpgrade.exe 可以藉由執行 Estimate 命令,提供其嘗試預先配置的空間量估計。

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

由於 TfsPreUpgrade.exe (大量複製數據、索引建立 ) 等作業,因此可能會對伺服器的效能造成影響。 Microsoft 不預期此影響非常明顯,我們已將 TfsPreUpgrade.exe 所執行的作業優化,以將對您伺服器和使用者的影響降到最低。 如果您在執行 TfsPreUpgrade.exe 時遇到效能問題,一律可以藉由輸入 Ctrl-C 來取消。 TfsPreUpgrade.exe 會寫入,以便取消它正在執行的作業。 它不應該讓資料庫處於不良狀態,而且如果資料庫在執行完成之前結束,則一律可以重新執行多次。

由於 TfsPreUpgrade.exe 會建立觸發程式,以在初始移轉之後讓數據表的原始和新復本保持同步,即使取消 TfsPreUpgrade.exe 仍可能會繼續對伺服器的效能造成影響。 同樣地,Microsoft 不預期此影響非常明顯,而且我們已優化這些觸發程式的效能,以將對您伺服器和使用者的影響降到最低。 如果您在取消 TfsPreUpgrade.exe 之後繼續遇到效能問題,您可以使用 [還原] 命令 TfsPreUpgrade.exe 復原執行命令執行的大部分動作。 還原將會移除 Run 命令所安裝的所有觸發程式,將會刪除它建立的所有新數據表等等。如需執行所採取的一組動作,這些動作未由 Revert 還原,請參閱下方。

處理非常大量專案的 TFVC 作業,最有可能受到 TfsPreUpgrade.exe 所建立觸發程式的負面影響。 如果可以,請在 TfsPreUpgrade.exe 執行時避免這些 TFVC 作業,並在離線升級至 TFS 2015 之前完成。

  • 建立、刪除和重新命名分支。
  • 終結會影響大量項目的作業。
  • 刪除使用 TFVC 的專案。

如果您需要執行這些作業,您可以預期它們至少需要兩次的時間,才能就地完成 TfsPreUpgrade 觸發程式。

如何? 執行 TfsPreUpgrade.exe?

執行 TfsPreUpgrade.exe 的建議程式如下:

  1. 下載 TfsPreUpgrade.exe。 請注意,您安裝 TfsPreUpgrade 的機器並不重要,只要它可以存取相關的 SQL 實例 () ,它就會以其所有相依性壓縮。

  2. 將它解壓縮到本機目錄。

  3. 判斷您要執行 TfsPreUpgrade.exe 的集合資料庫。 它可以在任何集合資料庫上執行,而不會對升級能力造成負面影響,但通常只有足以在離線升級期間需要大量停機的資料庫才需要。 Microsoft 建議在大小超過 1 TB 的資料庫上使用 TfsPreUpgrade.exe。

  4. 身為 SQL 實例上系統管理員的使用者, (TfsPreUpgrade 在其執行) 期間設定數個追蹤旗標,請執行 Run 命令:

    TfsPreUpgrade.exe 執行 /TargetDatabaseNames:“{SQL Instance};{集合資料庫名稱}”

  5. 如果您想要在多個集合資料庫上執行 TfsPreUpgrade.exe,您可以使用多個 TfsPreUpgrade.exe (調用,在此情況下,它們會以平行) 執行,或者您可以在單一調用中指定多個逗號分隔的 SQL 實例/集合資料庫字元串, (在此情況下,它們會依序執行) 。

TfsPreUpgrade.exe 會執行一段時間,視集合資料庫的大小而定, (執行資料庫) 。 它將會報告進度,讓您瞭解其距離,以及可能留下多少時間。 一旦 TfsPreUpgrade.exe 完成,其安裝的觸發程式將會保留由於伺服器在在線流動至移轉數據表而所做的任何其他變更。 因此,執行離線升級至TFS 2015之前,不需要再次執行它。

程式代碼變換統計數據

執行 TfsPreUpgrade.exe 時,您可以考慮的其中一個進階選項是略過超過某些閾值的程式代碼變換統計數據移轉。 在簽入 TFVC 的變更時,背景程式會計算程式代碼變換統計數據,並儲存在 TfsPreUpgrade.exe 移轉的其中一個數據表中。 此數據接著會流向倉儲和 Cube,然後可用於報表。 如需詳細資訊,請參閱 此處

如果您 (或任何程式代碼變換統計數據對) 不感興趣,您可以在執行 TfsPreUpgrade.exe 和後續執行離線升級時節省一些時間,方法是略過超過指定日期的統計數據移轉。 這可以使用選擇性的 /SkipCodeChurnBefore 參數來完成執行命令。 例如,如果您想要略過 2015 年 1 月 1 日之前的程式代碼變換統計數據移轉,您可以使用下列命令行:

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

如果您使用此選項,則不會移轉相關的程式代碼變換統計數據,且不會出現在離線升級后的倉儲和 Cube 中。

離線升級至 TFS 2015

您現在已準備好離線升級至 TFS 2015,您可以遵循升級 TFS 的一般程式。

如需 TfsPreUpgrade.exe 封鎖的一些不常執行作業的其他數據,如需執行 TfsPreUpgrade.exe 還原時未還原之資料庫 TfsPreUpgrade.exe 變更的詳細資訊,請參閱下方。

封鎖的作業

在執行 TfsPreUpgrade.exe 一些「安全」觸發程序執行初期就已就緒,以封鎖 TFS 2013 所允許但 TFS 2015 不再允許的作業,或會導致觸發程式存在時發生問題 TfsPreUpgrade.exe。 其中包括:

  1. 刪除專案。 一旦您針對集合資料庫執行 TfsPreUpgrade.exe,就不建議刪除專案。 如果您刪除專案,它將會在完成刪除之前失敗,讓項目離開 [刪除] 狀態。 升級至 TFS 2015 之後,將會再次支持項目刪除。
  2. 建立工作區,其中包含不存在根資料夾的參考。 這些將會失敗,並出現錯誤TF10169。 請注意,其中一個可能呈現的案例是在工作區範本參考根資料夾的組建定義中,在這些案例中,組建可能會在建立工作區期間失敗,並出現指定的錯誤。 由於與 Project 重新命名相關的變更,因此 TFS 2015 會繼續不支援此案例,但將會失敗並顯示更相關的錯誤訊息。
  3. 透過針對 TFS 用戶端 OM 撰寫的程式代碼呼叫 VersionControlServer.CreateTeamProjectFolder () 。 這將會失敗,並出現錯誤TF10169。 由於與 Team Project 重新命名相關的變更,因此 TFS 2015 將繼續不支援此案例,但將會失敗,並顯示更相關的錯誤訊息。

TfsPreUpgrade.exe 還原的例外狀況

執行 TfsPreUpgrade.exe 有一些副作用,執行 TfsPreUpgrade.exe Revert 不會還原。 最感興趣的是,不會還原 TfsPreUpgrade.exe 所完成之資料庫和/或事務歷史記錄空間的任何預先配置,這表示您的資料庫檔案可能比執行 TfsPreUpgrade.exe 之前大得多。 不過,不會使用額外的空間,因為將會刪除由 TfsPreUpgrade.exe 建立的其他數據表。 建議您保留此空間,因為這兩者都會自然填入,因為資料庫檔案中的數據大小會增加,而且因為最終需要升級至 TFS 2015。

未還原的其他副作用不會受到影響,而且只會針對您的資訊列在這裡。 任何情況下,這些變更都會由升級至 TFS 2015 進行,而且不應該對伺服器運作或最終升級造成任何影響。

  1. TFS 版本控制數據中找到並修正的任何損毀都不會還原。
  2. 不會移除損毀偵測和修正腳本新增至tbl_Version的數據行。
  3. 啟用壓縮的數據表不會再次停用。