管理加速資料庫復原
適用於: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 位置是具有三個步驟的流程。
關閉 ADR 功能。
ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = OFF; GO
請等到已釋放 PVS 儲存的所有版本。
為了針對持續版本存放區,透過新的位置開啟 ADR,您必須確認所有版本資訊都已從先前的 PVS 位置清除。 若要強制進行清除,請執行命令:
EXEC sys.sp_persistent_version_cleanup [database name];
sys.sp_persistent_version_cleanup
預存程序是同步的,這表示它在從目前 PVS 中清除所有版本資訊前都不會完成。 一旦完成,您便可以藉由查詢 DMVsys.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 以便使其位於新檔案群組。開啟 ADR 並指定 PVS 的新位置:
ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = ON (PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG]);