应用此修补程序后,必须在具有 512 字节物理扇区大小的所有服务器或副本上启用跟踪标志 1800 作为启动参数,然后重启它们,以使此修补程序正常工作。
症状
请考虑以下情况:
-
在 Microsoft SQL Server 中启用 AlwaysOn 可用性组或日志船功能。
-
将主要和辅助副本 (replica) 的日志文件存储在 AlwaysOn 可用性组中的磁盘 (AG) 具有不同的扇区大小。 或者,在 Logshipping 环境中,存储 Logshipping 主服务器和 Logshipping 辅助服务器的日志文件的磁盘具有不同的扇区大小。 例如:
-
主副本 (replica) 日志文件位于扇区大小为 512 字节的磁盘上。 但是,辅助副本 (replica) 日志文件位于扇区大小为 4 kb 的磁盘上, (KB) 。
-
主副本 (replica) 日志文件位于扇区大小为 512 字节的本地系统上。 但是,辅助副本 (replica) 位于扇区大小为 4 KB (KB) 的 Windows Azure 存储磁盘上。
-
在这种情况下,以下错误消息记录在错误日志SQL Server。 如果在重启服务器之前存在未应用于辅助服务器的日志,则错误消息可能会在重启后继续运行一段时间。
存在 X 个未对齐的日志 IO,需要回退到同步 IO。 当前 IO 位于文件 ....
此外,由于同步 I/O,AG 或 Logshipping 同步运行速度非常慢。 如果辅助副本 (replica) 位于 Windows Azure 存储中,则完成同步过程所需的时间比预期长得多。
注意 使用扇区大小为 4 KB 的新驱动器和扇区大小为 512 字节的旧驱动器时,会出现此问题。 有关新驱动器的详细信息,请参阅 SQL Server - 新驱动器使用 4K 扇区大小和SQL Server - 存储空间/VHDx 和 4K 扇区大小。
解决方法
此问题首先在以下SQL Server累积更新中得到解决。
SQL Server 2014 /zh-cn/help/3011055 的累积更新 5
SQL Server 2012 SP2 /help/3002049 的累积更新 3
SQL Server 2012 SP1 /help/3002044 的累积更新 13
在扇区大小为 512 字节的磁盘上运行的所有服务器副本上应用修补程序并启用跟踪标志 1800 作为启动参数后,你注意到以下文件的大小稍有增加:
-
事务日志文件
-
日志备份
此外,你注意到以下消息记录在主服务器的SQL Server错误日志中:
正在重写数据库“<数据库名称>”的日志尾部,以匹配 4096 字节的新扇区大小
这是可以安全忽略的信息性消息。
SQL Server的每个新累积更新都包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 请参阅SQL Server的最新累积更新:
解决方法
若要解决此问题,请将目标处的事务日志文件移动到 每个物理扇区的字节 数设置为 512 字节的驱动器。
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
更多信息
最佳做法是,尝试确保所有副本上的所有磁盘至少 (托管日志文件) 具有相同扇区大小的所有磁盘。 在混合环境中,辅助节点的物理扇区为 512 字节,而主副本的扇区大小为 4 KB,则应在具有 512 字节物理扇区大小并重启的所有服务器或副本上使用 TF 1800 作为启动标志。 这可确保正在进行的日志创建格式使用 4 KB 扇区大小。
有关SQL Server如何处理较大扇区大小的详细信息,请参阅支持博客上的以下文章:
SQL Server – 存储空间/VHDx 和 4K 扇区大小
可以使用 Fsutil 命令提示符实用工具来确定每个物理扇区的字节数值。 如果此参数在输出中不可见,则必须应用 知识库文章中指定的修补程序982018。
若要验证你拥有的驱动器类型,请执行以下步骤:
-
在提升的命令提示符下运行以下命令:
Fsutil fsinfo ntfsinfo x: 注意 x 占位符表示要检查的驱动器。
-
使用“ 每个扇区字节数 ”和“ 每个物理扇区字节数 ”的值来确定你拥有的驱动器类型。 为此,请使用下表:
“每扇区的字节数”值
“每个物理扇区的字节数”值
驱动器类型
4096
4096
4K 本机
512
4096
高级格式 (也称为 512E)
512
512
本机 512 字节