管理加速資料庫復原

適用於:SQL Server 2019 (15.x)

本文包含的資訊,說明在 SQL Server 2019 (15.x) 與更高版本中管理及設定加速資料庫復原 (ADR) 的最佳做法。 如需 Azure SQL 上 ADR 的詳細資訊,請參閱 Azure SQL 中的加速資料庫復原

注意

在 Azure SQL 資料庫與 Azure SQL 受控執行個體中,所有資料庫均已啟用加速資料庫復原 (ADR) ,且無法停用。 若您發現問題,無論是儲存體使用方式、高中止異動與其他因素,請參閱疑難排解加速資料庫復原 (ADR) 或聯絡 Azure 支援

應考慮加速資料庫復原的對象

許多客戶都認為加速資料庫復原 (ADR) 是一項寶貴技術,可改善復原時間。 在決定哪些資料庫應使用 ADR 之前,請先考慮下列累積因素,進行評估,根據累積因素判斷是否支持或反對使用 ADR。

  • 若工作負載無法避免長時間執行異動,則建議使用 ADR。 例如,若長時間執行的異動具有復原風險,ADR 可提供協助。

  • 針對曾經歷使用中交易造成交易記錄大幅成長的工作負載,建議使用 ADR。

  • 若因 SQL Server 長時間執行復原 (例如未預期的 SQL Server 重新啟動或手動異動復原) 而導致工作負載長期無法使用資料庫,則建議使用 ADR。

  • ADR 不支援在資料庫鏡像中註冊的資料庫。

  • 由於單一執行緒持久版本存放區 (PVS) 版本更簡潔,因此不建議在大於 100 TB 的資料庫上採用 ADR。

  • 若您的應用程式執行許多非批次累加式更新,例如在每次存取/插入資料列時更新記錄,則您的工作負載可能不適用 ADR。 請考慮盡可能將應用程式查詢重寫為批次更新,直到命令結尾為止,並減少大量的小型更新異動。

評估您的工作負載是否適合 ADR

在工作負載啟用 ADR 之後,請尋找徵兆確定持久版本存放區 (PVS) 是否跟上。 建議參閱疑難排解加速資料庫復原,並使用所述方式來監視 ADR 健康情況。

若資料庫環境具高更新/刪除計數 (例如大量 OLTP),且無待用/復原時間讓 PVS 清除執行序回收空間,則不建議使用 ADR。 一般而言,商務作業週期允許此時間,但在部分情況,您可能需手動起始 PVS 清除執行序,以便利用應用程式活動條件。

  • 若長時間執行 PVS 清除執行序,您可能會發現中止異動計數將會增加,同時導致 PVS 變大。 透過 sys.dm_tran_aborted_transactions DMV 來報告中止異動計數,以及利用 sys.dm_tran_persistent_version_store_stats 報告清除開始/結束時間以及 PVS 大小。 如需詳細資訊,請參閱 sys.dm_tran_persistent_version_store_stats

  • 若要在工作負載之間或維護期間手動啟動 PVS 清除程序,請使用 sys.sp_persistent_version_cleanup。 如需詳細資訊,請參閱 sys.sp_persistent_version_cleanup

  • 在「SNAPSHOT」或「READ COMMITTED SNAPSHOT」隔離模式中,長時間執行查詢的工作負載可能會延遲其他資料庫的 ADR PVS 清除,導致 PVS 檔案成長。 如需詳細資訊,請參閱疑難排解加速資料庫復原中的長時間使用快照集掃描一節。 這適用 SQL Server 執行個體與 Azure SQL 受控執行個體,或 Azure SQL Database 彈性集區的執行個體。

加速資料庫復原的最佳做法

本節包含 ADR 的指導與建議。

  • 針對 SQL Server,請將 PVS 版本存放區隔離至較高層級儲存體的檔案群組,例如高階 SSD、進階 SSD 或持久記憶體 (PMEM),有時稱為儲存體類別記憶體 (SCM) 。 如需詳細資訊,請參閱將 PVS 的位置變更至不同檔案群組。 此選項不適用 Azure SQL Database 與 Azure SQL 受控執行個體。

  • 請確定資料庫具足夠空間以將 PVS 使用量納入考慮。 如果資料庫不具足夠空間可讓 PVS 成長,ADR 將無法產生版本。 相較於 tempdb 版本存放區,ADR 可節省版本存放區的空間。

  • 請避免在資料庫中執行多筆長時間異動。 儘管 ADR 其中一項目標是在因重做而造成資料庫復原時加快其速度,但執行多筆長時間異動可能會延遲版本清除,並增加 PSV 大小。

  • 使用資料定義變更或 DDL 作業來避免大型交易。 ADR 會使用 SLOG (系統記錄檔資料流) 機制來追蹤復原時所使用的 DDL 作業。 僅在交易處於使用中時,才會使用 SLOG。 SLOG 具有檢查點,因此避免使用 SLOG 的大型交易可協助改善整體效能。 這些案例可能會導致 SLOG 佔用更多空間:

    • 多個 DDL 皆是在一個交易中執行。 例如,在一個交易中執行快速建立和卸除暫存資料表。

    • 資料表出現過多已修改資料分割/索引。 例如,在這類資料表上的 DROP TABLE (卸除資料表) 作業需要大量的 SLOG 記憶體保留,這會延遲截斷交易記錄,並延遲復原/重做作業。 您可採用因應措施,個別並漸進卸除索引,然後卸除資料表。 如需有關 SLOG 的詳細資訊,請參閱 ADR 復原元件

  • 避免或減少不必要的中止狀況。 高中止率會影響 PVS 清除工具並造成較低的 ADR 效能。 中止的原因可能源自高比率的鎖死、重複的索引鍵或其他條件約束違規。

    • sys.dm_tran_aborted_transactions DMV 會顯示 SQL Server 執行個體上的所有已中止交易。 nested_abort 資料行表示交易已認可,但部分交易已中止 (儲存點或巢狀交易),這可能會封鎖 PVS 清除程序。 如需詳細資訊,請參閱 sys.dm_tran_aborted_transactions (Transact-SQL)

啟用和控制 ADR

注意

在 Azure SQL Database 與 Azure SQL 受控執行個體中,所有資料庫均啟用加速資料庫復原 (ADR),無法停用或移至不同檔案群組。

SQL Server 2019 (15.x) 預設 ADR 為關閉,且可利用 DDL 語法來控制:

ALTER DATABASE [DB] SET ACCELERATED_DATABASE_RECOVERY = {ON | OFF};

使用此語法來控制是否開啟或關閉功能,或是為「持續版本存放區」(PVS) 資料指定特定的檔案群組。 若沒有指定檔案群組,PVS 將會儲存在 PRIMARY 檔案群組中。

資料庫必須具獨佔鎖定,才能變更此狀態。 這表示「ALTER DATABASE」命令會停止,直到所有作用中工作階段均消失為止,而且任何新工作階段都需在「ALTER DATABASE」命令後方等候。 若有必要完成作業並移除鎖定,您可利用終止子句 WITH ROLLBACK [IMMEDIATE | AFTER {number} SECONDS | NO_WAIT] 來中止資料庫的任何作用中工作階段。 如需詳細資訊,請參閱ALTER DATABASE SET 選項

管理持久版本存放區檔案群組

ADR 功能是以為變更建立版本,並將資料項目的不同版本儲存在 PVS 中作為基礎。 尋找 PVS 所在位置及決定如何管理 PVS 中資料的大小時,有一些考量事項。

啟用 ADR 而不指定檔案群組

此作業需要資料庫的獨佔存取權。

ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = ON;
GO

在此情況下,不會指定 PVS 檔案群組,PRIMARY 檔案群組會保存 PVS 資料。

啟用 ADR,並指定 PVS 應儲存在檔案群組

除了預設 PRIMARY 檔案群組之外,您可設定 ADR 使用另一檔案群組來保存 PVS 資料。

當您在 PRIMARY 之外的檔案群組啟用 ADR 之前,您必須建立檔案群組與資料檔案。

建立 VersionStoreFG 檔案群組,並在檔案群組建立新資料檔案。 例如:

ALTER DATABASE [MyDatabase] ADD FILEGROUP [VersionStoreFG];
GO
ALTER DATABASE [MyDatabase] ADD FILE ( NAME = N'VersionStoreFG'
, FILENAME = N'E:\DATA\VersionStore.ndf'
, SIZE = 8192KB , FILEGROWTH = 65536KB )
TO FILEGROUP [VersionStoreFG];
GO

必需先建立檔案群組與次要資料檔案,然後才啟用 ADR,並指定 PVS 應儲存在特定檔案群組。 此作業需要資料庫的獨佔存取權。

ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = ON
(PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG]);

停用 ADR 功能

ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = OFF;
GO

即使在停用 ADR 功能後,持續版本存放區中仍然會有儲存的版本,因為系統仍需要它們來進行邏輯還原。

將 PVS 的位置變更至不同檔案群組

在 SQL Server,您可能會因為各種理由,需要將 PVS 的位置移至不同檔案群組。 例如,PVS 可能需要更多空間,或是更快的儲存體。

變更 PVS 位置是具有三個步驟的流程。

  1. 關閉 ADR 功能。

    ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = OFF;
    GO
    
  2. 請等到已釋放 PVS 儲存的所有版本。

    為了針對持續版本存放區,透過新的位置開啟 ADR,您必須確認所有版本資訊都已從先前的 PVS 位置清除。 若要強制進行清除,請執行命令:

    EXEC sys.sp_persistent_version_cleanup [database name];
    

    sys.sp_persistent_version_cleanup 預存程序是同步的,這表示它在從目前 PVS 中清除所有版本資訊前都不會完成。 一旦完成,您便可以藉由查詢 DMV sys.dm_tran_persistent_version_store_stats 並檢查 persistent_version_store_size_kb 的值,來驗證版本資訊確實已移除。

    SELECT DB_Name(database_id), persistent_version_store_size_kb 
    FROM sys.dm_tran_persistent_version_store_stats where database_id = [MyDatabaseID];
    

    persistent_version_store_size_kb 的值為 0 時,您可重新啟用 ADR 功能,設定 PVS 以便使其位於新檔案群組。

  3. 開啟 ADR 並指定 PVS 的新位置:

    ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = ON
    (PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG]);
    

下一步