共用方式為


針對與大於 4 KB 的系統磁碟扇區大小相關的錯誤進行疑難解答

本文提供在 Windows 11 和 Windows Server 2022 上安裝或啟動 SQL Server 實例期間疑難解答錯誤的解決方案。 本文適用於所有發行的 SQL Server 版本。

本文所討論的錯誤與大於 4 KB 的系統磁碟扇區大小有關。

適用於:SQL Server 所有版本

徵兆

案例 #1: 您可以在 Windows 11 裝置上安裝任何版本的 SQL Server。 然後,您會看到類似 SQL Server 資料庫引擎 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 目前支援 512 位元組和 4 KB 的磁區記憶體大小,因此無法啟動 SQL Server。

您可以執行 命令來確認您遇到此特定問題:

fsutil fsinfo sectorinfo <volume pathname>

例如,若要分析 E: 磁碟區,請執行下列命令:

fsutil fsinfo sectorinfo E:

尋找以位元組為單位傳回的值 PhysicalBytesPerSectorForAtomicityPhysicalBytesPerSectorForPerformance,如果值不同,請保留 最大的 值,以確定磁碟扇區大小。 值為 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 as Administrator節所述。 您必須在新增登錄機碼之後重新啟動裝置,才能讓這項變更生效。

    重要

    本節包含的步驟會告訴您如何修改 Windows 登錄。 不過,如果您不當修改登錄,可能會發生嚴重問題。 因此,請務必小心執行下列步驟。 為增加保護起見,請先備份登錄,再進行修改。 然後,如果發生問題,您就可以還原登錄。 如需如何備份和還原登錄的詳細資訊,請參閱 如何在 Windows 中備份和還原登錄一文。

    登錄編輯程式

    1. 瀏覽至 Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device
    2. 在 [ 編輯 ] 功能表上,指向 [ 新增],然後選取 [多重字串] 值。 將其命名為 ForcedPhysicalSectorSizeInBytes
    3. 變更新的值,在中 * 4095輸入 。 選取 [ 確定 ],然後關閉註冊表編輯器。

    以系統管理員身分的命令提示字元

    1. 新增金鑰。

      REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" /v "ForcedPhysicalSectorSizeInBytes" /t   REG_MULTI_SZ /d "* 4095" /f
      
    2. 驗證金鑰是否已成功新增。

      REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" /v "ForcedPhysicalSectorSizeInBytes"
      

    以系統管理員身分的PowerShell

    1. 新增金鑰。

      New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" -Name   "ForcedPhysicalSectorSizeInBytes" -PropertyType MultiString        -Force -Value "* 4095"
      
    2. 驗證金鑰是否已成功新增。

       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

另請參閱