啟用延遲耐久性 - AWS 規範指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

啟用延遲耐久性

某些程序 (例如 EnterpriseOne 的物料需求計畫 (MRP) 會遇到由於將交易提交至交易日誌的磁碟延遲所造成的瓶頸。將交易日誌 (LDF) 移至 io2 或者 io2 Block Express 儲存裝置通常能夠充分提升效能,以符合業務需求。如果這不夠,可以在資料庫中設定延遲耐久性。

重要

只有在效能不可接受且您完全瞭解在系統故障情況下交易在資料庫中的行為時,才應啟用延遲耐久性。

啟用延遲耐久性時,會使用回寫 (而非直寫) 操作來快取交易遞交。如果發生系統故障,仍可保證資料庫的一致性。不過,任何尚未遞交到磁碟的交易都會遺失。此外,與複寫相關的其他功能,包括 AWS Database Migration Service (AWS DMS) 使用的功能,會在延遲耐久性生效時變得不可用。

在特定組態中進行 MRP 測試期間,我們觀察到以下幾點:

  • 將 LDF 檔案移至 io2 Block Express 的執行期減少了 52% (與 gp3 上的 LDF 檔案的基準相比)。

  • gp3 上的 LDF 檔案的基準相比,啟用延遲耐久性會使執行期減少 79%。

若要啟用延遲耐久性,請針對資料庫執行以下命令。

USE master ALTER DATABASE JDE_Prist920 SET DELAYED_DURABILITY = FORCE

延遲耐久性通常會每秒清除日誌數次,但是如果發生磁碟 I/O 瓶頸,延遲可能會增加。若要確保低復原點目標 (RPO),可以將 sys.sp_flush_log 命令放入排程器中以高頻執行。此程序強制將日誌清空至磁碟。

下列指令碼會在 SQL 作業排程器中建立作業,每分鐘執行一次。調整指令碼中的作業名稱和資料庫名稱,以反映您的需求。

USE msdb; GO DECLARE @myjob nvarchar(128); DECLARE @mydb nvarchar(128); DECLARE @mycommand nvarchar(max); DECLARE @myschedule nvarchar(128); DECLARE @jobId binary(16); DECLARE @scheduleId binary(16); SET @myjob = 'JDE_Prist920 Flush Log Cache'; SET @mydb = 'JDE_Prist920'; SET @mycommand = 'sys.sp_flush_log'; SET @myschedule = 'EveryMinute'; SELECT @scheduleId = schedule_id FROM msdb.dbo.sysschedules WHERE (name = @myschedule) IF (@scheduleId IS NULL) BEGIN EXEC sp_add_schedule @schedule_name = @myschedule, @freq_type = 4, @freq_interval = 1, @freq_subday_type = 0x2, @freq_subday_interval= 60 END SELECT @jobId = job_id FROM msdb.dbo.sysjobs WHERE (name = @myjob) IF (@jobId IS NULL) BEGIN EXEC sp_add_job @job_name = @myjob EXEC sp_add_jobstep @job_name = @myjob, @step_name = N'process step', @subsystem = N'TSQL', @command = @mycommand, @database_name = @mydb EXEC sp_attach_schedule @job_name = @myjob, @schedule_name = @myschedule; EXEC dbo.sp_add_jobserver @job_name = @myjob END