Felsöka fel som rör systemdisksektorstorlek som är större än 4 KB

Den här artikeln innehåller lösningar för felsökning av fel under installation eller start av en instans av SQL Server på Windows 11 och Windows Server 2022. Den här artikeln är giltig för alla versioner av SQL Server.

De fel som beskrivs i den här artikeln gäller systemdisksektorstorlek som är större än 4 kB.

Gäller för: SQL Server alla versioner

Symptom

Scenario nr 1: Du installerar alla versioner av SQL Server på en Windows 11 enhet. Sedan visas fel som liknar följande meddelande för komponenten Database Engine Services i SQL Server:

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. 

Scenario nr 2: Du installerar alla versioner av SQL Server på en Windows 10 enhet. Sedan uppgraderar du operativsystemet på enheten till Windows 11. När du försöker starta SQL Server på en Windows 11 enhet startar inte tjänsten och i SQL Server felloggen ser du poster som liknar:

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. 

Scenario nr 3: Du installerar alla versioner av SQL Server på en Windows 10 enhet. Sedan uppgraderar du operativsystemet på enheten till Windows 11. När du försöker starta SQL Server på en Windows 11 enhet startar inte tjänsten. I SQL Server felloggen ser du poster som liknar:

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 

Scenario nr 4: Du installerar LocalDB på en Windows 11 enhet. Installationen misslyckas och i SQL Server felloggen ser du poster som liknar:

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.

I händelseloggen för Windows 11 program ser du poster som liknar:

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

Obs!

Du kan stöta på de fel som nämns i föregående scenarier för en SQL Server instans som du installerade manuellt eller på en LocalDB-instans som installerats av program.

Scenario nr 5: Om du försöker använda en sektorstorlek som är högre än 4 kB visas följande felmeddelande:

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.

Orsak

Under tjänststarten påbörjar SQL Server databasåterställningsprocessen för att säkerställa databaskonsekvens. En del av den här databasåterställningsprocessen omfattar konsekvenskontroller på det underliggande filsystemet innan du försöker öppna system- och användardatabasfiler.

På system som kör Windows 11 exponerar vissa nya lagringsenheter och enhetsdrivrutiner en disksektorstorlek som är större än den sektorstorlek på 4 KB som stöds.

När detta inträffar kan SQL Server inte starta på grund av filsystemet som inte stöds eftersom SQL Server för närvarande stöder sektorlagringsstorlekar på 512 byte och 4 KB.

Du kan bekräfta att du stöter på det här specifika problemet genom att köra kommandot:

fsutil fsinfo sectorinfo <volume pathname>

Om du till exempel vill analysera E:-volymen kör du följande kommando:

fsutil fsinfo sectorinfo E:

Leta efter värdena PhysicalBytesPerSectorForAtomicity och PhysicalBytesPerSectorForPerformance, som returneras i byte, och om de skiljer sig åt behåller du den största för att fastställa disksektorns storlek. Värdet 4096 anger en sektorlagringsstorlek på 4 kB.

Dessutom bör du vara medveten om Windows-supportprincipen för stöd för filsystem och lagringssektorstorlek. Mer information finns i microsofts supportprincip för 4 KB-sektorhårddiskar i Windows .

Obs!

Det finns ingen utgiven version av SQL Server kompatibel med sektorstorlekar som är större än 4 kB. Mer information finns i artikeln om stödgränser för stödgränser för hårddiskenheter i SQL Server.

Åtgärder

Microsoft undersöker för närvarande det här problemet.

Överväg någon av följande lösningar:

  • Om du har flera enheter i det här systemet kan du ange en annan plats för databasfilerna när installationen av SQL Server har slutförts. Kontrollera att enheten visar en sektorstorlek som stöds när du kör frågor mot fsutil kommandona. SQL Server stöder för närvarande sektorlagringsstorlekar på 512 byte och 4 096 byte.

  • Du kan lägga till en registernyckel, vilket gör att beteendet för Windows 11 och senare liknar Windows 10. Detta tvingar sektorstorleken att emuleras som 4 KB. Om du vill lägga till registernyckeln ForcedPhysicalSectorSizeInBytes använder du registry Editor eller kör kommandon enligt beskrivningen i avsnittet PowerShell som administratör. Du måste starta om enheten när du har lagt till registernyckeln för att ändringen ska börja gälla.

    Viktigt

    Det här avsnittet innehåller steg som beskriver hur du ändrar Windows-registret. Det kan uppstå allvarliga problem om du gör detta felaktigt. Följ därför instruktionerna noga, och säkerhetskopiera registret innan du gör några ändringar i det. Då kan du återställa registret om det uppstår problem. Mer information om hur du säkerhetskopierar och återställer registret finns i artikeln Säkerhetskopiera och återställa registret i Windows .

    Register Editor

    1. Gå till Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device.
    2. redigera-menyn pekar du på Ny och väljer sedan Flersträngsvärde. Ge den namnet ForcedPhysicalSectorSizeInBytes.
    3. Ändra det nya värdet, skriv in * 4095. Välj OK och stäng Registereditorn.

    Kommandotolk som administratör

    1. Lägg till nyckeln.

      REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" /v "ForcedPhysicalSectorSizeInBytes" /t   REG_MULTI_SZ /d "* 4095" /f
      
    2. Kontrollera om nyckeln har lagts till.

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

    PowerShell som administratör

    1. Lägg till nyckeln.

      New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" -Name   "ForcedPhysicalSectorSizeInBytes" -PropertyType MultiString        -Force -Value "* 4095"
      
    2. Kontrollera om nyckeln har lagts till.

       Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" -Name   "ForcedPhysicalSectorSizeInBytes"
      
  • Du kan börja SQL Server genom att ange spårningsflaggan 1800. Mer information finns i DBCC TRACEON. Den här spårningsflaggan är inte aktiverad som standard. Spårningsflagga 1800 tvingar SQL Server att använda 4 KB som sektorstorlek för alla läs- och skrivåtgärder. När du kör SQL Server på diskar med en fysisk sektorstorlek som är större än 4 kB simulerar spårningsflaggan 1800 en intern enhet på 4 KB, vilket är den sektorstorlek som stöds för SQL Server.

  • Installera SQL Server på tillgängliga Windows 10 enheter i stället.

Mer information

Windows 11 interna NVMe-drivrutiner uppdaterades för att inkludera den faktiska sektorstorleken som rapporterats direkt av NVMe-lagringsenheterna. Detta gjordes i stället för att förlita sig på den information som emuleras från filsystemdrivrutinerna.

De Windows 10 drivrutinerna rapporterar inte källsektorstorleken för den fysiska lagringen.

De förbättrade Windows 11 drivrutinerna bortser från den emulering som vanliga NVMe-lagringsenheter använder. Till exempel fsutil visar en sektorstorlek på 8 KB eller 16 KB, i stället för att emulera den nödvändiga 4 KB-sektorstorleken som krävs av Windows.

Följande tabell innehåller en jämförelse av de sektorstorlekar som rapporteras av operativsystemen. Det här exemplet illustrerar skillnaderna mellan Windows 10 och Windows 11 med samma lagringsenhet. För värdena PhysicalBytesPerSectorForAtomicity för och PhysicalBytesPerSectorForPerformancevisar Windows 10 4 KB och Windows 11 visar 16 KB.

Exempel på utdata från 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

Se även