針對與系統磁碟扇區大小大於 4 KB 相關的錯誤進行疑難解答
本文提供在 Windows 11 和 Windows Server 2022 上安裝或啟動 SQL Server 實例時,針對錯誤進行疑難解答的解決方案。 本文適用於所有發行版的 SQL Server。
本文中討論的錯誤與大於 4 KB 的系統磁碟扇區大小有關。
適用於:SQL Server 所有版本
徵狀
案例 #1:您會在 Windows 11 裝置上安裝任何版本的 SQL Server。 然後,您會看到類似下列訊息的錯誤,適用於 SQL Server 的 Database Engine Services 元件:
Feature: Database Engine Services
Status: Failed
Reason for failure: An error occurred during the setup process of the feature.
Next Step: Use the following information to resolve the error, uninstall this feature, and then run the setup process again.
Component name: SQL Server Database Engine Services Instance Features
Component error code: 0x851A001A
Error description: Wait on the Database Engine recovery handle failed. Check the SQL Server error log for potential causes.
案例 2:您可以在 Windows 10 裝置上安裝任何版本的 SQL Server。 然後,將裝置上的OS升級為 Windows 11。 當您嘗試在 Windows 11 裝置上啟動 SQL Server 時,服務無法啟動,而在 SQL Server 錯誤記錄檔中,您會注意到類似下列專案:
2021-11-05 23:42:47.14 spid9s There have been 256 misaligned log IOs which required falling back to synchronous IO. The current IO is on file C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\master.mdf.
案例 #3:您會在 Windows 10 裝置上安裝任何版本的 SQL Server。 然後,將裝置上的OS升級為 Windows 11。 當您嘗試在 Windows 11 裝置上啟動 SQL Server 時,服務無法啟動。 在 SQL Server 錯誤記錄檔中,您會注意到類似下列專案:
Faulting application name: sqlservr.exe, version: 2019.150.2000.5, time stamp: 0x5d8a9215
Faulting module name: ntdll.dll, version: 10.0.22000.120, time stamp: 0x50702a8c
Exception code: 0xc0000005
Fault offset: 0x00000000000357ae
Faulting process id: 0x1124
Faulting application start time: 0x01d7bf67449d262c
Faulting application path: C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Binn\sqlservr.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
案例 4:您會在 Windows 11 裝置上安裝 LocalDB。 安裝程式失敗,在 SQL Server 錯誤記錄檔中,您會注意到類似下列專案:
2021-12-15 23:25:04.28 spid5s Cannot use file 'C:\Users\Administrator\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\TestInstance\master.mdf' because it was originally formatted with sector size 4096 and is now on a volume with sector size 16384. Move the file to a volume with a sector size that is the same as or smaller than the original sector size.
在 Windows 11 應用程式事件記錄檔中,您會注意到類似下列專案:
Message : Windows API call WaitForMultipleObjects returned error code: 575. Windows system error message is: {Application Error}
The application was unable to start correctly (0x%lx). Click OK to close the application.
Reported at line: 3621.
Source : SQLLocalDB 11.0
注意事項
針對您手動安裝的 SQL Server 實例或應用程式所安裝的 LocalDB 實例,您可能會遇到先前案例中所述的失敗。
案例 5: 如果您嘗試使用大於 4 KB 的扇區大小,您會看到下列錯誤訊息:
Error: 5179, Severity: 16, State: 1.
Cannot use file 'data file path', because it is on a volume with sector size 8192. SQL Server supports a maximum sector size of 4096 bytes. Move the file to a volume with a compatible sector size.
原因
在服務啟動期間,SQL Server 開始資料庫復原程式,以確保資料庫一致性。 此資料庫復原程式的一部分牽涉到在您嘗試開啟系統和使用者資料庫檔案之前,對基礎文件系統進行一致性檢查。
在執行 Windows 11 的系統上,某些新的儲存設備和設備驅動器會公開大於支援的 4 KB 扇區大小的磁碟扇區大小。
發生這種情況時,SQL Server 將無法啟動,因為檔系統不受支援,因為 SQL Server 目前支援 512 個字節和 4 KB 的扇區記憶體大小。
您可以執行 命令來確認您遇到此特定問題:
fsutil fsinfo sectorinfo <volume pathname>
例如,若要分析 E: 磁碟區,請執行下列命令:
fsutil fsinfo sectorinfo E:
尋找以位元組傳回的 值 PhysicalBytesPerSectorForAtomicity
和 PhysicalBytesPerSectorForPerformance
,如果不同,請保留 最大的 值來確定磁碟扇區大小。 值為 4096 表示磁區記憶體大小為 4 KB。
此外,請留意文件系統和記憶體扇區大小支援的 Windows 支持原則。 如需詳細資訊,請參閱 Windows 中 4 KB 扇區硬碟的 Microsoft 支援 原則一文。
注意事項
沒有發行版的 SQL Server 與大於 4 KB 的扇區大小相容。 如需詳細資訊,請參閱 SQL Server 文章中的硬碟扇區大小支援界限。
解決方案
Microsoft 目前正在調查此問題。
請考慮下列 其中一個 解決方案:
如果您在此系統上有多個磁碟驅動器,您可以在安裝 SQL Server 完成之後,為資料庫檔案指定不同的位置。 查詢命令時
fsutil
,請確定磁碟驅動器反映支援的扇區大小。 SQL Server 目前支援 512 個字節和 4096 個字節的磁區記憶體大小。您可以新增登錄機碼,這會導致 Windows 11 和更新版本的行為類似於 Windows 10。 這會強制將扇區大小模擬為 4 KB。 若要新增
ForcedPhysicalSectorSizeInBytes
登錄機碼,請使用登錄 編輯器 或執行命令,如PowerShell系統管理員一節中所述。 您必須在新增登錄機碼之後重新啟動裝置,這項變更才會生效。重要事項
本節包含可告訴您如何修改 Windows 登錄的步驟。 然而,不當修改登錄可能會發生嚴重的問題。 因此,請務必謹慎地依照這些步驟執行。 為了有多一層保護,請先備份登錄再進行修改。 如此一來,您就可以在發生問題時還原登錄。 如需如何備份和還原登錄的詳細資訊,請參閱 如何在 Windows 中備份和還原登錄 一文。
- 瀏覽至
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device
。 - 在 [ 編輯] 功能表上,指向 [ 新增],然後選取 [ 多字符串值]。 命名命名為
ForcedPhysicalSectorSizeInBytes
。 - 變更新的值,在中
* 4095
輸入 。 選取 [確定 ],然後關閉 [登錄編輯器]。
新增索引鍵。
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" /v "ForcedPhysicalSectorSizeInBytes" /t REG_MULTI_SZ /d "* 4095" /f
驗證是否已成功新增金鑰。
REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" /v "ForcedPhysicalSectorSizeInBytes"
新增索引鍵。
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" -Name "ForcedPhysicalSectorSizeInBytes" -PropertyType MultiString -Force -Value "* 4095"
驗證是否已成功新增金鑰。
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" -Name "ForcedPhysicalSectorSizeInBytes"
- 瀏覽至
您可以藉由指定追蹤旗標 1800 來啟動 SQL Server。 如需詳細資訊,請參閱 DBCC TRACEON。 預設不會啟用此追蹤旗標。 追蹤旗標 1800 會強制 SQL Server 使用 4 KB 作為所有讀取和寫入作業的扇區大小。 當您在實體扇區大小大於 4 KB 的磁碟上執行 SQL Server 時,使用追蹤旗標 1800 會模擬原生 4 KB 磁碟驅動器,這是 SQL Server 支援的扇區大小。
請改為在可用 Windows 10 裝置上安裝 SQL Server。
其他相關資訊
Windows 11 原生 NVMe 驅動程式已更新,以包含 NVMe 儲存設備直接報告的實際扇區大小。 這是完成的,而不是依賴從文件系統驅動程式仿真的資訊。
Windows 10 驅動程式不會報告實體記憶體的來源扇區大小。
改良的 Windows 11 驅動程式會忽略一般 NVMe 記憶體裝置所使用的模擬。 例如, fsutil
會顯示 8 KB 或 16 KB 的扇區大小,而不是模擬 Windows 所需的 4 KB 扇區大小。
下表提供操作系統所報告扇區大小的比較。 此範例說明使用相同存放裝置 Windows 10 與 Windows 11 之間的差異。 針對 和PhysicalBytesPerSectorForPerformance
的PhysicalBytesPerSectorForAtomicity
值,Windows 10 會顯示 4 KB,Windows 11 顯示 16 KB。
的範例輸出 fsutil fsinfo sectorinfo <volume pathname>
Windows 10 | Windows 11 |
---|---|
LogicalBytesPerSector : 512 |
LogicalBytesPerSector : 512 |
PhysicalBytesPerSectorForAtomicity : 4096 |
PhysicalBytesPerSectorForAtomicity : 16384 |
PhysicalBytesPerSectorForPerformance : 4096 |
PhysicalBytesPerSectorForPerformance : 16384 |
FileSystemEffectivePhysicalBytesPerSectorForAtomicity : 4096 |
FileSystemEffectivePhysicalBytesPerSectorForAtomicity : 4096 |
Device Alignment : Aligned (0x000) |
Device Alignment : Aligned (0x000) |
Partition alignment on device : Aligned (0x000) |
Partition alignment on device : Aligned (0x000) |
No Seek Penalty |
No Seek Penalty |
Trim Supported |
Trim Supported |
Not DAX capable |
Not DAX capable |
Not Thinly-Provisioned |
Not Thinly-Provisioned |