改進
假設您使用的是 Linux 上的 SQL Server 2017。在某些情況下,SQL Server 在使用易失性緩存的系統上可能會遇到資料遺失的問題。由於無法預見的情況(例如電源發生故障,就會將緩存的資料寫入穩定的媒體),造成損失。為了避免這類案例,在 Linux 上的 SQL Server 2017 累積更新6(CU6)中,會出現 強制性清洗機制。如果您的儲存子系統無法在斷電時保證持久寫入,我們建議您在 Linux 上套用 SQL Server 2017 的 CU6。 此更新可啟用下列功能:
-
強制清洗 資料庫寫入活動期間的行為,例如檢查點與事務日誌寫入。
-
預設為 writethrough = 1和alternatewritethrough = 1選項的設定設定。 這些預設設定可讓 SQL Server 確保將寫入 durably 刷新到封鎖裝置。 備用 writethrough是將持續性清洗要求優化至檔案系統的選項。如需這兩個設定的詳細資訊,請參閱下表:
名稱 |
預設值 |
描述 |
writethrough |
1 |
有效值為0和1。 1 = 將 FILE_FLAG_WRITE_THROUGH 要求轉換成 O_DSYNC 開啟。 0 = 防止 O_DSYNC 開啟 FILE_FLAG_WRITE_THROUGH 要求的翻譯。 |
alternatewritethough |
1 |
有效值為0和1。 1= 針對 FILE_FLAG_WRITE_THROUGH 要求的主機延伸啟用優化清洗。在檔案上寫入(s)對區塊裝置進行 fdatasync 的檔案優化呼叫。 0 = 停用替換清除優化。 檔案是使用 O_DSYNC 開啟,而基礎檔案系統會執行必要的寫入、清洗要求。 注意alternatewritethrough 設定只有在 writethrough = 1 時才適用。 |
其他相關資訊
如需詳細資訊,請參閱Linux 版 SQL Server 2017 的最佳做法與設定指導方針 ,以處理高頻率寫入工作負載及資料庫檔案放置建議。
在能保證寫入的儲存系統上執行的SQL Server 安裝O_DIRECT 安全,可以讓追蹤旗(TF)3979停用強制清洗行為,並將 mssql. 會議中的alternatewritethrough和writethrough選項設定為零。這會傳回 SQL Server 2017來CU6 行為。
注 儲存系統可以確保任何快取或暫存的寫入都是安全且持久的,方法是保證將所頒發給裝置的寫操作保留在系統發生故障、介面重設和電源故障等狀態,而媒體本身則是硬體冗余的。
以下是有關使用這些變更之檔案 i/o 之 SQL Server 行為的詳細資訊:
-
在 CU6 中,資料庫(.mdf)和事務日誌(.ldf)檔案在使用強制刷新 行為時,不會在中使用 writethrough 和 alternatewritethrough。 TF 3979 會禁止對資料庫與事務記錄檔檔案使用 強制性刷新 行為,且會使用 writethrough 和 alternatewritethrough 邏輯。
-
使用 SQL Server 中的FILE_FLAG_WRITE_THROUGH 開啟的其他檔案,例如資料庫快照、資料庫一致性檢查(CHECKDB)的內部快照、探測器追蹤檔案,以及延伸事件追蹤檔案,都會使用 writethrough 和 alternatewritethrough 優化。
解決方案
此更新包含在 SQL Server 的下列累積更新中:
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 查看 SQL Server 的最新累計更新:
參考
瞭解 Microsoft 用於描述軟體更新的 詞彙。