提高
假设你在 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以禁用强制刷新行为,并将 mssqlalternatewritethrough中的 writethrough 和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 用于描述软件更新的 术语。