مشکلات SQL Server با سایز سکتور بالاتر از 4 کیلوبایت در ویندوز
با عرضه شدن دستگاه های ذخیره سازی جدید، سایز سکتور های بالاتر از 4 کیلوبایت در دسترس کاربران قرار گرفته است.
با توجه به اینکه SQL Server تنها از سایز سکتور 512 بایت و 4 کیلوبایت پشتیبانی میکند در صورتی که سایز سکتور از 4 کیلوبایت بالاتر باشد، SQL Server اجرا نخواهد شد.
در این حالت، هنگام اجرای SQL Server Express LocalDB ممکن است خطای زیر را در Event Viewer مشاهده کنید:
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.
برای اطمینان از بروز این مشکل خاص، میتوانید دستور زیر را به صورت Administrator اجرا کنید.
fsutil fsinfo sectorinfo <volume name>
به عنوان مثال برای بررسی پارتیشن C به صورت زیر عمل کنید:
fsutil fsinfo sectorinfo c:
پس از اجرای دستور، دو مقدار PhysicalBytesPerSectorForAtomicity و PhysicalBytesPerSectorForPerformance را بررسی کنید. اگر مقادیر متفاوت بودند بالاترین مقدار بین آنها را در نظر بگیرید.
این مقدار سایز سکتور شماست.
LogicalBytesPerSector : 512
PhysicalBytesPerSectorForAtomicity : 16384
PhysicalBytesPerSectorForPerformance : 16384
FileSystemEffectivePhysicalBytesPerSectorForAtomicity : 4096
Device Alignment : Aligned (0x000)
Partition alignment on device : Aligned (0x000)
No Seek Penalty
Trim Supported
Not DAX capable
Not Thinly-Provisioned
همانطور که در نمونه بالا میتوانید مشاهده کنید، سایز سکتور بالاتر از 4 کیلوبایت (4096 بایت) بوده و در حال حاظر هیچ نسخهای از SQL Server از سایز سکتور بالاتر از 4 کیلوبایت پشتیبانی نمیکند.
راه حل
در حال حاظر، با تنظیم کلید ریجستری ForcedPhysicalSectorSizeInBytes در ویندوز، شما میتوانید در دستگاه های ذخیره سازی جدید NVMe که سایز سکتور آنها بالاتر از 4 کیلوبایت هستند از SQL Server استفاده کنید.
این کلید ریجستری در ویندوز باعث میشود سایز سکتور به 4 کیلوبایت شبیه سازی شود.
برای تنظیم کلید ریجستری مراحل زیر را دنبال کنید:
- ابتدا PowerShell را به صورت Administrator اجرا کنید.
- برای افزودن کلید و مقدار آن دستور زیر را اجرا کنید:
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"
برای اعمال تغییرات لازم است سیستم را ریاستارت کنید.
علت اصلی
در ویندوز 11 درایور های NVMe به صورتی بروزرسانی شدهاند که مقدار واقعی سایز سکتور که توسط خود دستگاه ارائه میشود را گزارش دهند. قبلاً این مقدار از درایور های فایل سیستم که مقدار شبیه سازی شده را برگشت میدادند دریافت میشد.
درایور های ویندوز 10 مقدار اصلی سایز سکتور را گزارش نمیدهند.
نمونه در ویندوز 11:
LogicalBytesPerSector : 512
PhysicalBytesPerSectorForAtomicity : 16384
PhysicalBytesPerSectorForPerformance : 16384
FileSystemEffectivePhysicalBytesPerSectorForAtomicity : 4096
Device Alignment : Aligned (0x000)
Partition alignment on device : Aligned (0x000)
No Seek Penalty
Trim Supported
Not DAX capable
Not Thinly-Provisioned
نمونه در ویندوز 10:
LogicalBytesPerSector : 512
PhysicalBytesPerSectorForAtomicity : 4096
PhysicalBytesPerSectorForPerformance : 4096
FileSystemEffectivePhysicalBytesPerSectorForAtomicity : 4096
Device Alignment : Aligned (0x000)
Partition alignment on device : Aligned (0x000)
No Seek Penalty
Trim Supported
Not DAX capable
Not Thinly-Provisioned
اطلاعات بیشتر
برای کسب اطلاعات بیشتر و مطالعه در مورد سایر مشکلات مرتبط با سایز سکتور به مطلب زیر مراجعه کنید.