ag切换后辅助节点大量misaligned log IOs

[TOC]

故障上报

2018.09.07 在对alwayson group做了故障转移后,在新的辅助节点SQL Server日志中看到大量如下信息,而且这个misaligned log IOs数字在不断变大:

消息 There have been 295168 misaligned log IOs which required falling back to synchronous IO.  The current IO is on file e:\sqllog\xxx_Log.ldf.

如下是版本信息:

  • OS版本:Windows Server 2012 x64
  • SQL版本:SQL Server 2014 SP2
  • 磁盘型号:Memblaze NVMe SSD 3.2T

目前ag共3个节点,执行 fsutil fsinfo ntfsinfo c:fsutil fsinfo ntfsinfo e: 看到的信息如下:

  • 节点A:C盘(每个扇区字节数512,每个物理扇区字节数512),E盘(每个扇区字节数512,每个物理扇区字节数4096
  • 节点B:C盘(每个扇区字节数512,每个物理扇区字节数512),E盘(每个扇区字节数512,每个物理扇区字节数512
  • 节点C:C盘(每个扇区字节数512,每个物理扇区字节数512),E盘(每个扇区字节数512,每个物理扇区字节数4096

注意:只有节点B的E盘物理扇区字节数与别的磁盘不同。

  • 场景1:当节点A为主副本、B和C为辅助副本的时候,所有SQL Server日志无上述信息;
  • 场景2:当节点B为主副本、A和C为辅助副本的时候,在A和C的SQL Server日志出现大量上述信息;

原厂回复

根据微软工程师的回复,此case是由于ag中主副本与辅助副本存放日志文件的磁盘(case中为e盘)物理扇区不兼容导致的。

故障原因

在AG或Logshipping环境中,当主副本日志文件位于512字节的物理扇区大小的磁盘上。但是,辅助副本日志文件位于有4K字节的扇区大小的磁盘上。

在这种情况下,辅助副本的SQL Server日志中就会记录如下错误信息:

There have been X misaligned log IOs which required falling back to synchronous IO. The current IO is on file ....

关于512原生、512E、4K原生

每个扇区字节数 每个物理扇区字节数 Drive type 备注
4096 4096 4K native 4K原生: 逻辑扇区=物理扇区=4096字节
512 4096 Advanced Format (also known as 512E) 512E:逻辑扇区=512字节,物理扇区=4096字节
512 512 512-byte native 512原生:逻辑扇区=物理扇区=512字节

比如:512E的物理扇区就是:逻辑扇区(每个扇区字节数)为512,物理扇区为4096:

Alt text

解决方案

建议所有副本的磁盘使用相同的sector size,推荐方案2

方案1:在逻辑层面将io控制在4KB [不推荐]

打开 trace flag 1800 让 SQL Server 从逻辑层面将io控制在4KB,步骤如下:

1.安装修复该问题的SQL Server累积更新包

2.在物理扇区为512字节原生的副本上,打开trace flag 1800

DBCC TRACEON(1800)

3.在主副本的SQL Server日志中,会看到如下信息:

The tail of the log for database '<database name>' is being rewritten to match the new sector size of 4096 bytes

方案2:所有副本的磁盘使用相同的sector size [推荐]

通过工具修改Memblaze的nvme SSD设备的物理扇区为4096字节,步骤如下:

1.首先用memblaze驱动代替原生驱动

  • 上传附件nvme_Win8.1&2012r2_Release_x64.0300-mns.zip,解压、点击按步骤完成安装
  • 安装完成后,在Windows "设备管理器'下会看到,"storage controllers" ---"Memblaze NVMe 1.2 ..."

2.上传附件 windows_nvmemgr.zip 到计算机,并解压

3.进入到nvmemgr文件夹,点左上角 file--open command prompt--open command prompt as administrator,进入powershell界面

Alt text

4.执行如下命令,擦除nvme SSD上所有的分区和内容,执行之前请做好必要的备份。若只有一片nvme SSD则默认为nvme0

nvmemgr formatnvm -l 1 -c nvme0

5.命令执行完成后,按提示重启机器

6.再次进入系统后,对nvme SSD做格式化等操作,然后查看物理扇区会变成4096了

参考

Copyright © www.sqlfans.cn 2023 All Right Reserved更新时间: 2022-01-14 17:30:07

results matching ""

    No results matching ""